JavaScript 学习笔记— —闭包(一)
一个函数内部还定义了另一个函数,内部函数可以调用外部函数的变量,这就是闭包。
function foo(x) { var tmp = 3; function bar(y) { alert(x + y + (++tmp)); } bar(10); } foo(2)
上述代码输出为16,因为bar可以调用foo内的参数x,同样也可以调用foo里的tmp值。
function foo(x) { var tmp = 3; return function (y) { alert(x + y + (++tmp)); } } var bar = foo(2); // bar is now a closure. bar(10);
上方代码的函数依旧输出16,bar还是可以调用x和tmp,即使它在函数外。但其实tmp仍然是在bar闭包之内,所以每次调用时都会进行运算。
闭包最简单的实例:
var a = 10; function test() { console.log(a); // will output 10 console.log(b); // will output 6 } var b = 6; test();
当一个JavaScript函数被调用,将会创建一个新的执行环境。这个执行环境连同函数参数和父对象,还可以接收外部的声明变量。(如上例的a和b)