20180901 JavaScript闭包和匿名函数自动调用

引用:

1. JavaScript闭包_by runoob

2. JS中(function(){xxx})这么写是什么意思?

(一)闭包是可以访问上一层函数作用域里变量的函数,即便上一层函数已经关闭。闭包的目的在于:

1. 创建私有变量(局部变量),避免因使用全局变量而产生其他函数对变量的影响。

2. 支持嵌套函数影响和改变私有变量。

3. 支持外部调用该嵌套函数。

由于全局变量的作用域是整个JavaScript,反过来任何脚本和函数都能改变全局变量,容易造成不必要的麻烦。这时我们需要变量私有化(局部变量)。

而局部变量的局限性在于只有函数内部可以定义,页面调用函数时这个私有变量的值是固定的,而通常我们需要这个私有变量可以变化。

以下函数中,页面在调用add函数时counter变为1

1 function add(){
2     var counter = 0;
3     function plus(){counter += 1;}
4     plus();    
5     return counter; 
6 }

通常我们希望页面能够调用add函数中的嵌套函数plus,使得变量counter的值可以累加。但嵌套函数无法在外部被调用。

(二)闭包 可以实现函数自我调用,通过闭包可以访问上一层作用域的函数,即便函数已经关闭。

1 var add = (function ()
2 {
3     var counter = 0;
4     return function () { return counter += 1; }
5 })();
6 
7 document.getElementById("demo").innerHTML = add();

变量add指定了函数自我调用的返回值(return counter+=1)

变量add可以作为一个函数使用,它可以访问上一层作用域的变量(当我们第二次调用add()时,此时counter=1,函数自我调用返回counter=2。)

此时counter成为私有变量受匿名函数的作用域保护,只能通过调用add()修改。闭包封装了一个函数,同时可以访问它的私有变量的值。

猜你喜欢

转载自www.cnblogs.com/goakon/p/9570049.html
今日推荐