`
ipjmc
  • 浏览: 702621 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

浅析Javascript闭包的特性

阅读更多
        Javascript闭包的定义非常晦涩——闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落。这些外部执行域的非持久型变量神奇地保留它们在闭包最初定义(或创建)时的值(深连结)。

        简单来说,Javascript闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量(键值对),而这些键值对是不会随上一级函数 的执行完成而销毁。周爱民说得更清楚,闭包就是“属性表”,闭包就是一个数据块,闭包就是一个存放着“Name=Value”的对照表。就这么简单。但 是,必须强调,闭包是运行期概念,一个函数实例。

        Javascript闭包的实现,通常是在函数内部再定义函数,让该内部函数使用上一级函数的变量或全局变量。

        ECMAScript认为使用全局变量是一个简单的Javascript闭包实例。

var sMessage = "Hello World";
function sayHelloWorld(){
    alert(sMessage);
};
sayHelloWorld();


        但它完成没有体现Javascript闭包的特性……

        附上今天在无忧看到的问题:
        要求:
        让这三个节点的Onclick事件都能正确的弹出相应的参数。

<ul>    
<li id="a1">aa</li>    
<li id="a2">aa</li>   
<li id="a3">aa</li>   
</ul>   
<script type="text/javascript">   
<ul>   
<li id="a1">aa</li>   
<li id="a2">aa</li>   
<li id="a3">aa</li>   
</ul>   
<script type="text/javascript">   
    for(var i=1; i < 4; i++){   
        var id = document.getElementById("a" + i);   
        id.onclick = function(){   
        alert(i);//现在都是返回4      
    }   
}   
</script> 


正解:
for(var i=1; i < 4; i++){    
    var id = document.getElementById("a" + i);    
    id.onclick = new function(){        
        var i2=i;//这个i是闭包的闭包       
        return function(){           
            alert(i2);       
        }     
    };   
} 
分享到:
评论

相关推荐

    Javascript闭包与函数柯里化浅析_.docx

    Javascript闭包与函数柯里化浅析_.docx

    浅析javascript语言中的函数闭包现象.pdf

    浅析javascript语言中的函数闭包现象.pdf

    浅析javascript闭包 实例分析

    通俗解释 Javascript中所有的函数都是一个闭包。不过一般来说,嵌套的function产生的闭包更为强大,也是大部分时候我们所说的“闭包”。看如下代码: 代码如下: [removed] &lt;!– //外层函数a function a(){ //...

    JavaScript中闭包之浅析解读(必看篇)_.docx

    JavaScript中闭包之浅析解读(必看篇)_.docx

    JavaScript中闭包之浅析解读(必看篇)

    下面小编就为大家带来一篇JavaScript中闭包之浅析解读(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Javascript闭包与函数柯里化浅析

    主要介绍Javascript闭包与柯里化,通俗易懂,需要的朋友可以参考下。

    闭包和类的浅析与应用

    简单的介绍了一下JavaScript的闭包和类的书写以及应用.专门给菜鸟提供的.高手们请自觉退步.

    浅析JavaScript作用域链、执行上下文与闭包

    JavaScript 采用词法作用域(lexical scoping),函数执行依赖的变量作用域是由函数定义的时候决定,而不是函数执行的时候决定,通过本文给大家介绍JavaScript作用域链、执行上下文与闭包相关知识,感兴趣的朋友一起...

    javascript中的return和闭包函数浅析

    主要介绍了javascript中的return和闭包函数浅析,至少可以让你搞懂那么多()是什么意思,需要的朋友可以参考下

    浅析javascript函数表达式

    开始学习javascript函数表达式,仔细阅读下文。 1、一般形式的创建函数,在执行代码之前会先读取函数声明,所以可以把函数声明写在函数调用的下面: sayHi(); function sayHi(){ alert&#40;"Hi!"&#41;; } 2、...

    浅析Javascript匿名函数与自执行函数

    函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途。匿名函数:就是没有函数名的函数。 函数的定义,大致可分为三种方式: 第一种:这也是最常规的一种 function double(x){ return 2 * x; } 第二...

    浅析Node在构建超媒体API中的作用

    而描述超媒体的类型我们使用MIME。MIME即Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型,MIME是一个互联网标准,最早是应用于...Node.js是事件驱动的,它充分利用JavaScript的闭包特性和事件处理

    C#委托浅析与漫谈

    1. 概述  委托是C#区别于其他语言的一个特色,用它我们能写出简洁优雅的代码、能很方便的实现对象间的交互。...  闭包似乎在javascript里谈得比较多,其实只要支持定义”局部函数”的语言都会涉及到”闭包”的概念

Global site tag (gtag.js) - Google Analytics