f = null; 解决方式;让闭包机制清除,必须删除外部函数调用的时候生成的(定义的那个对应内部函数);
6.闭包面试题 代码段1
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function() {
return function() {
return this.name;
};
}
};
console.log(object.getNameFunc()());
解析
//解析
var f = object.getNameFunc();
var f = function() {
return this.name;
}
f();
function() {
return this.name;
}(); //相当于立即执行函数 this指向的是window
此题没有用到闭包 所以输出结果为 The Window; 代码段2
var name2 = "The Window";
var object2 = {
name2: "My Object",
getNameFunc: function () {
var that = this;
return function () {
return that.name2;
};
}
};
console.log(object2.getNameFunc()());
解析 典型的一个作用域可以访问另一个函数的局部变量。是闭包 var that =this; 这个this指的调用者object2对象,所以that也是object2对象,所以that.name2指的是object2的name属性。输出结果为 My Object;