2018.6.3
JavaScript 闭包
1、变量
函数可以访问函数内部定义的变量,此时变量是局部变量
函数也可以访问函数外部定义的变量,此时的变量是全局变量
区别在于,局部变量只能用于定义它的函数,其他函数无法访问,全局变量可以用应用于所有函数,即使名称相同,
这两个变量也是不同的量,修改其中一个时,不会影响另一个的值
2.嵌套函数
在JavaScript中,所有函数都能访问它们上一层的作用域。
例如,用内嵌函数plus()访问counter变量,以实现计数的功能
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})(); //表达式后带()表示自调用
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
注:变量 add 指定了函数自我调用的返回字值。
自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。
add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。
这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。
计数器受匿名函数的作用域保护,只能通过 add 方法修改