资讯专栏INFORMATION COLUMN

javascript-- (function(){...})() 闭包

missonce / 1500人阅读

摘要:首先从我们常见的函数开始函数声明关键字声明一个函数,再指定函数名匿名函数,声明了函数但没指定函数名。匿名函数体内形成一个子作用域,这个子作用域可以调用外部作用域的变量,但外部作用域不可以调用子作用域的变量。

首先从我们常见的javascript函数开始:

function funName(){...};//函数声明,function关键字声明一个函数,再指定funame函数名
function(){...};//匿名函数,声明了函数但没指定函数名。 附给一个变量——函数表达式;附给一个事件——事件处理程序(object.onclick=function(){...};);创建闭包...
var funName=function(){...}; //函数表达式,将匿名函数附给一个变量。

function funName(){alert("hello world");}
funName();
//这样调用函数

function(){alert("hello World");}
(function(){alert("hello World");})();
//这样直接调用,或者(function(){alert("hello World");}());这两个没有区别哦

var fnName=function(){
    alert("Hello World");
}();
//函数表达式后加()直接调用  

function fnName(){
    alert("Hello World");
}();
//报错

如何传参

(function(a){alert(a);})(123);
new function(a){alert(a);}(123);

结论 X()要想通过加括号直接运行,那么X必须是一个函数表达式。(function(){alert("hello World");})();中外面的括号是一个分组操作符,会让解析器强制将JSON的花括号解析成表达式而不是代码块。

作用
(function(){...})()称为闭包。

匿名函数体内形成一个子作用域,这个子作用域可以调用外部作用域的变量,但外部作用域不可以调用子作用域的变量。这样便不会污染全局变量。

这种方式可以保存闭包外面的变量的状态
举例

function fn() {
    for(var i=0 ; i<2; i++) {
        var variate= i;
        setTimeout(function() {
            alert(variate);
        }, 2000);
    }
} 
fn();//1,1

function fn() {
    for(var i=0 ; i<2; i++) {
    (function(){
        var variate= i;
        setTimeout(function() {
            alert(variate);
        }, 2000);
    })();
    }
} 
fn();//0,1

如有不对,还请指正。本文参考如下二位作者,感谢
链接描述
链接描述

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86847.html

相关文章

  • Javascript闭包入门(译文)

    摘要:也许最好的理解是闭包总是在进入某个函数的时候被创建,而局部变量是被加入到这个闭包中。在函数内部的函数的内部声明函数是可以的可以获得不止一个层级的闭包。 前言 总括 :这篇文章使用有效的javascript代码向程序员们解释了闭包,大牛和功能型程序员请自行忽略。 译者 :文章写在2006年,可直到翻译的21小时之前作者还在完善这篇文章,在Stackoverflow的How do Java...

    Fourierr 评论0 收藏0
  • 理解Javascript闭包

    摘要:但是闭包也不是什么复杂到不可理解的东西,简而言之,闭包就是闭包就是函数的局部变量集合,只是这些局部变量在函数返回后会继续存在。可惜的是,并没有提供相关的成员和方法来访问闭包中的局部变量。 (收藏自 技术狂) 前言:还是一篇入门文章。Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C++的程序员来说是一个新的语言特性。本文将...

    dayday_up 评论0 收藏0
  • JavaScript 闭包

    摘要:闭包的注意事项通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。但是,在创建了一个闭包以后,这个函数的作用域就会一直保存到闭包不存在为止。最后通过释放了和对闭包的引用。从而使用闭包模块化代码,减少全局变量的污染。 JavaScript 闭包 原文链接 什么是闭包(Closure) 简单讲,闭包就是指有权访问另一个函数作用域中的变量的函数。 MDN 上面这么说:闭包是一种特殊的...

    zhou_you 评论0 收藏0
  • JavaScript闭包,只学这篇就够了

    摘要:当在中调用匿名函数时,它们用的都是同一个闭包,而且在这个闭包中使用了和的当前值的值为因为循环已经结束,的值为。最好将闭包当作是一个函数的入口创建的,而局部变量是被添加进这个闭包的。 闭包不是魔法 这篇文章使用一些简单的代码例子来解释JavaScript闭包的概念,即使新手也可以轻松参透闭包的含义。 其实只要理解了核心概念,闭包并不是那么的难于理解。但是,网上充斥了太多学术性的文章,对于...

    CoderBear 评论0 收藏0
  • [学习笔记] JavaScript 闭包

    摘要:但是,必须强调,闭包是一个运行期概念。通过原型链可以实现继承,而与闭包相关的就是作用域链。常理来说,一个函数执行完毕,其执行环境的作用域链会被销毁。所以此时,的作用域链虽然销毁了,但是其活动对象仍在内存中。 学习Javascript闭包(Closure)javascript的闭包JavaScript 闭包深入理解(closure)理解 Javascript 的闭包JavaScript ...

    sunsmell 评论0 收藏0
  • 理解 JavaScript 闭包

    摘要:如何在初学就理解闭包你需要接着读下去。这样定义闭包是函数和声明该函数的词法环境的组合。小结闭包在中随处可见。闭包是中的精华部分,理解它需要具备一定的作用域执行栈的知识。 这是本系列的第 4 篇文章。 作为 JS 初学者,第一次接触闭包的概念是因为写出了类似下面的代码: for (var i = 0; i < helpText.length; i++) { var item = he...

    宠来也 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<