`

JavaScript Closure 闭包

阅读更多

看几个case:

-------------------------------1. -------------------------------

<script>
var name = 1;
function test1() {
    alert(name);
    var name = 2;
    alert(name);
   
    for(var i=0; i<10; i++) {
        var j = 100;
    }
    alert(i);
    alert(j);
}
</script>

alert依次出现:undefined, 2, 10, 100

JS变量的作用范围是function级别,与Java明显不同的是,Java有block级别的变量命名空间,比如for循环中的变量出了循环之后不能再使用,但是JS不同,所有定义在同一个function(暂不说嵌套function的情况)中的变量,会覆盖外部的同名变量,而无论是在本function的哪一行声明它,如果在声明它之前访问它,其值就是unfined

 

-------------------------------2. -------------------------------

<script>
var name = 1;
function test() {
    var name = 2;
    return function() {
        alert(name);
    }
};
var name = 3;
var f = test();
f();
</script>

 

alert的结果为2,这个是典型的闭包问题

 

 

 

-------------------------------3. -------------------------------

var a = 1;
function test1() {
    alert(a);
}
function test2() {
    var a = 2;
    alert(a);
}
test2();
结果会输出1,这也是闭包的问题。
好了,总结一下2和3这两个例子,可以这样解释,在定义阶段(不是运行阶段)JS遇到一个方法的定义时,方法中使用到某些变量,解释器开始寻找这个变量定义的位置,一旦找到就会绑定到这个变量。在运行时环境中再去寻找这个变量的值。所以,方法中的变量是定义时绑定好了的,不是在运行时。
分享到:
评论

相关推荐

    JavaScript闭包(closure).pdf

    JavaScript闭包(closure).pdf

    JavaScript闭包

    Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C++的程序员来说是一个新的语言特性。本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ...

    javascript 闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    javascript闭包详解中文word版

    资源名称:javascript闭包详解 中文word版   内容简介: ... Javascript中有几个非常重要的语言特性——对象、原型...闭包是Closure, 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    javascript中闭包(Closure)详解

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。小编之前一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什么,有什么用,本文把自己的理解些出来分享一下,希望...

    JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。很早就接触过闭包这个概念了,但是一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什么,有什么用,今天在网上...

    揭开Javascript闭包的真实面目

    对于初学者来说,理解Javascript闭包(closure)还是比较困难的,而撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目,让初学者理解起来更加容易一些。

    Javascript闭包(Closure)详解

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    javascript闭包(Closure)用法实例简析

    主要介绍了javascript闭包(Closure)用法,结合实例形式较为详细的分析了JavaScript闭包的概念、功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    Javascript的闭包详解

    前言:还是一篇入门文章。Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/...闭包是Closure,这是静态语言所不具有的一个新特性。但是闭包也不是什么复杂到不可

    理解javascript函数式编程中的闭包(closure)_.docx

    理解javascript函数式编程中的闭包(closure)_.docx

    javascript的闭包介绍(司徒正美)

    闭包的定义非常晦涩——闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落。... 在Javascript中闭包(Closure),有两个特点: 作为一个函数变量

    学习Javascript闭包(Closure)知识

    主要介绍了学习Javascript闭包(Closure)知识的相关资料,需要的朋友可以参考下

    JavaScript 闭包深入理解(closure)

    最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业。对于初学者来说别说理解闭包了,就连文字叙述都很难看懂。撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目。

    JavaScript中的闭包(Closure)详细介绍

    主要介绍了JavaScript中的闭包(Closure)详细介绍,函数调用对象与变量的作用域链、什么是闭包等内容,并给出了实例,需要的朋友可以参考下

    详谈JavaScript的闭包及应用

    维基百科这样定义了JS闭包:在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使...

    babel-plugin-closure-elimination:一个Babel插件,可在任何情况下消除JavaScript的闭包

    消除通天塔关闭这是一个插件,以性能的名义消除了JavaScript中不必要的闭包。 注意:现在需要Babel 6。什么? 变成这样的代码: function demo ( input ) { return input . map ( item =&gt; item + 1 ) . map ( item =...

Global site tag (gtag.js) - Google Analytics