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);
}
建议不要深度的使用闭包,那样的代码非常难以维护以及理解。