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)

原文地址:https://www.cnblogs.com/eaysun/p/4391215.html