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>