js的閉包核心問題就是變量的作用域,在一個閉包(一個函數)內部作用域與外部作用的關連問題。舉個例子
var i = 6;
var test = function(){
var i = 5;
return i;
}
以上的test相對外部來講就是一個閉包了,這個閉包裏面的變量i在自己的作用域範圍。這裏的返回值是5;
再來一個例子
var i = 6;
var test = function(){
var i = 5;
return function(){
var i = 9;
return i;
}
}
test函數中又有一個返回值的閉包,這個裏面的值是9,相信大家都已經看出來了,閉包{}內的作用域是不受外面影響的。如果是傳值的話則返回傳入的參數,在閉包中很好的保護起來。
var test = function(){
var i = 5;
var handle = setTimeout(function(){
return i;
}, 1000);
}
建議不要深度的使用閉包,那樣的代碼非常難以維護以及理解。