阮一峰:http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
一個PPT:https://www.gracecode.com/posts/2385.html
MDN上的一個例子:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
其中對于this的解釋:https://www.quirksmode.org/js/this.html
要理解的兩個例子:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
軒脈刃 說:
理解最后兩個例子:
1 函數(shù)中的this指的是調(diào)用這個函數(shù)的owner
2 object.getNameFunc()是返回一個函數(shù),并沒有執(zhí)行函數(shù)中的代碼
3 增加一個例子0:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return (this.name);
}
};
var name = object.getNameFunc();
alert(name);
4 把例子1變成
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name; //這個this是有上下文的限制的
};
}
};
var tmp = Object.getNameFunc(); //此時沒有執(zhí)行this.name
var name = tmp();//這個時候才執(zhí)行,這時候的this上下文為全局
alert(name);
//alert(object.getNameFunc()())
5 把例子2變成:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
var tmp = Object.getNameFunc(); //這個時候執(zhí)行了that = this,這里的this上下文是object,所以that指的是object
var name = Object.getNameFunc(); //這個時候執(zhí)行了that.name
alert(name);
//alert(object.getNameFunc()());