JavaScript闭包

JavaScript闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。就是形成一个不销毁的栈环境。

如果你要设置一个计数器,代码如下:

var counter = 0;
 
function add() {
   return counter += 1;
}
 
add();
add();
add();
 
// 计数器现在为 3

但问题counter属于全局变量,页面上的其他脚本可以改变计数器。这样我们把它变成局部变量。

function add(){
    var counter = 1;
    return counter += 1;
}

add();
add();
add();

这里输出为1,并没有累计数字。

这里需要闭包,代码如下:

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

案例解析

这里的案例中变量 add 指定了函数自我调用的返回字值。

自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。

add变量可以作为一个函数使用。它可以访问函数上一层作用域的计数器。

这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。

计数器受匿名函数的作用域保护,只能通过 add 方法修改。

注意事项

1、自调用函数外部的括号是必须的,如果没有加上JavaScript无法解析为一个函数表达式的自调用;而是解析为一个函数的声明和一个圆括号,并显示语法错误——圆括号内没有有效的表达式。

2、由于自调用函数是立即执行函数,其函数名称会自动被忽略,不能使用函数名调用,所以自调用函数没必要写函数名。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 如果要了解闭包,我们需要先了解闭包的由来,闭包的产生,源于JS的词法作用域 词法作用域 作用域是指一个 变量能够访...
    羊烊羴阅读 1,751评论 0 2
  • 闭包是函数和声明该函数的词法环境的组合 ​ 一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),...
    郭豪豪阅读 2,823评论 0 0
  • JavaScript 变量可以是局部变量或全局变量。 私有变量可以用到闭包。 全局变量 函数可以访问由函数内部定义...
    qinexpire阅读 1,454评论 0 1
  • JavaScript 变量可以是局部变量或全局变量。 私有变量可以用到闭包。 函数可以访问函数内部定义的变量: 函...
    sayhelloworld阅读 1,355评论 0 0
  • JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。 全局变量 变量声明时如果不使用 var...
    S大偉阅读 2,656评论 0 0

友情链接更多精彩内容