js 闭包
概念:作用域
全局变量和局部变量。函数内部可以使用全局变量,js的链式作用域结构
闭包就是能够读取其他函数内部变量的函数
1 可以在读取函数内部的局部变量
<script>
function f1()
{
var n = 999;
function f2()
{
var n = 2016;
alert(n);
}
return f2;
}
var result = f1();
result();
</script>
2 让变量始终保持在内存中
<script>
function f1()
{
var n = 999;
nadd=function()
{
n + 1;
}
function f2()
{
alert(n);
}
return f2;
}
var result = f1();
result();
nadd();
result();
</script>
运行结果第一次999,第二次1000;在调用方法后,变量的值并没有消失;原因:f2 被赋给一个全局变量,f2始终在内存中 ,而f2依赖f1,所以f1也始终在内存中
闭包的注意点
闭包保存在内存中,对内存的消耗很大,避免过度使用闭包,IE导致内存泄露,在退出函数前清除局部变量
闭包会在父函数外部,改变父函数内部变量的值
测试如下的运行结果
<script>
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function () {
return function () {
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window
</script>

浙公网安备 33010602011771号