闭包 closure
-
概念理解
能够读取其他函数内部变量的函数。解决了外部读取内部局部变量的问题。
-
用途
function f1() { var n = 1; // add 没有用var申明,此处为创建了一个全局变量,严格模式将报错 add = function() { return n+=1; } function f2() { window.alert(n); } return f2; } var result1 = f1(); //f2 result1(); // 1 add(); //add在全局作用域下, n = 2 result1() // 2
-
思考
var name = 'window'; var obj = { name: 'obj', getName: function() { return function(){ return this.name; }; } }; alert(obj.getName()()); // window // 等价于 var result = obj.getName(); alert(result()); // obj.getName() 返回一个匿名函数,相当于 var result = obj.getName();存在于全局作用域中,this 指window对象
var name = 'window'; var obj = { name: 'obj', getName: function() { var that = this; return function() { return that.name; }; } }; alert(obj.getName()()); // obj
// 4 4 4 4 for(var i = 1; i < 5; i+=1){ console.log(i) } // 1 2 3 4 for(var i = 1; i < 5; i+=1){ (function(i){console.log(i)})(i) }
原文: