1. 闭包
1.1 闭包的形成条件:
1、函数嵌套函数
2、内部函数使用了外部函数的变量或者外部函数的参数
1.2 作用:变相的外面使用里面的变量
在闭包中,内部函数使用了外部函数的变量,该变量不会被回收,会像全局变量一样长生不死(除非关闭程序或者网页)
1.3 闭包的优点也是缺点:使用的变量会被永久储存起来(除非关闭程序或者网页)
优点:方便我们对一个变量进行连续性操作。
缺点:使用的变量会永久储存,当你在页面中大量使用闭包的时候,无法垃圾回收机制回收的变量太多的时候,会很消耗内存
function fn1() {
var num = 10;
function fn2() {
num++;
console.log(num);
}
return fn2;
}
var fn3 = fn1();
fn3(); // 11
fn3(); // 12
2. this
2.1 默认绑定
-
全局环境中,
this
默认绑定到window
console.log(this === window); // true
-
自执行
this
指向
函数独立调用时this
默认绑定到window
function fun() { console.log(this === window); } fun(); // true
-
被嵌套的函数独立调用时
this
默认绑定到window
var a = 0; var obj = { a: 2, foo: function () { function test() { console.log(this.a); } test(); } } obj.foo(); // 0
-
闭包中里面函数独立调用,而不是方法调用,
this
默认绑定到window
var num = 1; function fn1() { var num = 10; function fn2() { console.log(++this.num); } fn2(); } fn1(); // 2
2.2 隐式绑定
-
一般被直接对象所包含的函数调用时,也称之为方法调用,
this
隐式绑定到该直接对象function fun() { console.log(this.a); }; var obj1 = { a: 1, foo: fun, obj2: { a: 2, foo: fun } } obj1.foo(); // 1 obj1.obj2.foo(); // 2
2.3 隐式丢失
- 隐式丢失是指被隐式绑定的函数丢失绑定对象,从而默认绑定到
window
- 把函数作为参数传递
- 内置函数
3. 改变this
指向
call(): 改变函数的this指向,还会马上执行函数
第一个参数是你想改变的this指向的对象
后面的其它参数就是该函数的实参
apply():改变函数的this指向,还会马上执行函数
第一个参数是你想改变的this指向的对象
第二个参数是数组,数组里面存放函数的实参
bind(): 改变函数的this指向, 不会立马执行函数,在该函数调用的时候才会改变this指向
第一个参数是你想改变的this指向的对象
后面的其它参数就是该函数的实参
网友评论