########js鏈?zhǔn)阶饔糜颍?br>
1、子對(duì)象會(huì)一級(jí)一級(jí)向上尋找父對(duì)象的變量,父對(duì)象的所有變量,對(duì)子對(duì)象都是可見的
2、父對(duì)象無(wú)法獲取子對(duì)象內(nèi)的局部變量
########從外部讀取局部變量
方法:在函數(shù)的內(nèi)部,再定義一個(gè)函數(shù)。
內(nèi)部函數(shù)可以讀取外部函數(shù)的局部變量,那把內(nèi)部函數(shù)作為返回值,就可以在外部函數(shù)讀取內(nèi)部函數(shù)的變量了。
閉包
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)
在立即執(zhí)行函數(shù)中

在一個(gè)立即執(zhí)行函數(shù)中,有一個(gè)局部變量local,有一個(gè)函數(shù)foo,foo里面可以訪問(wèn)到local變量,這就是一個(gè)閉包。
function foo(){
var local = 1;
function bar(){
local++;
return local;
}
return bar;
}
var func = foo();
func();
這里,local變量和bar函數(shù)組成了一個(gè)閉包。
因?yàn)樾枰植孔兞?,所以把local放在一個(gè)函數(shù)里,函數(shù)套函數(shù)只是為了造出一個(gè)局部變量,與閉包無(wú)關(guān)。
return bar只是為了bar能被使用,也與閉包無(wú)關(guān)。
閉包用途
1、讀取函數(shù)內(nèi)部的變量
2、讓這些變量的值始終保持在內(nèi)存中
************我是分割線*******************************
例子:讓下面的函數(shù)輸出3
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i]=function(){
return i;
};
}
console.log( fnArr[3]() );//10
1、形成閉包:加入立即執(zhí)行函數(shù)
var fnArr = [];
for (var i = 0; i < 10; i ++) {
(function(n){
fnArr[i]=function(){
return n;
};
})(i);
}
console.log( fnArr[3]() );//3
2、形成閉包
var fnArr = [];
for (var i = 0; i < 10; i ++) {
(function(){
var n=i;
fnArr[i]=function(){
return n;
};
})();
}
console.log( fnArr[3]() );
3、形成閉包
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] =(function(){
var n=i;
return function(){
return n;
}
})();
}
console.log( fnArr[3]() );
此篇僅是看過(guò)的幾篇關(guān)于閉包文章的一個(gè)筆記而已,摘取了一些文章的精華記錄下來(lái):
https://zhuanlan.zhihu.com/p/22486908JS 中的閉包是什么?
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html學(xué)習(xí)Javascript閉包(Closure)