javascript闭包原理

输出5个5

function box(){
    var arr = [];
    for(var i=0; i<5; i++){
        arr[i] = function(){
            return i;
        };
    }
    return arr;
}
var b = box();
for(var i=0; i<5; i++){
    console.log(b[i]());
}

输出0,1,2,3,4

function box(){
    var arr = [];
    for(var i=0; i<5; i++){
        arr[i] = (function(num){
            return num;
        })(i);
    }
    return arr;
}
var b = box();
for(var i=0; i<5; i++){
    console.log(b[i]);
}
时间: 2025-01-12 09:16:57

javascript闭包原理的相关文章

JavaScript 闭包原理分析

本文转载至 http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html 另一篇很好的资料 http://www.kryogenix.org/code/browser/secrets-of-javascript-closures/secrets_of_javascript_closures.pdf 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我

JavaScript闭包(closure)

闭包其实就是利用了函数作用域和匿名函数的知识,当函数A执行结束时,一部分变量变量被B引用,被引用的变量不能释放,形成了所谓的闭包.这里有篇很好的文章,可以参考一下. 下面看一个小例子: JavaScript 1 2 3 4 5 6 7 8 9 10 function show(){ var n=3; setTimeout(function(){alert("first:"+n);},3000); //3秒后显示first:3 alert("second:"+n);

举例详细说明javascript作用域、闭包原理以及性能问题(转)

这可能是每一个jser都曾经为之头疼的却又非常经典的问题,关系到内存,关系到闭包,关系到javascript运行机制.关系到功能,关系到性能. 文章内容主要参考自<High Performance JavaScript>,这本书对javascript性能方面确实讲的比较深入,大家有空都可以尝试着阅读一下,我这里有中英电子版,需要的话QQ317665171或者QQ邮箱联系. 复习,笔记,更深入的理解. 欢迎拍砖指正. 作用域: 下面我们先搞明白这样几个概念: 函数对象的[[scope]]属性.S

javascript闭包的简单理解

奖Javascript闭包前,先给大家讲个小故事 故事背景:刘备和曹操煮酒的时间段,故事可能有点小差异,刘备为曹操手下,关羽为间谍. 咳咳 曹操很想知道手下新来的刘备整天鼓捣啥: 曹操就问刘备,玄德你整天鼓捣啥: 刘备想,我靠这怎么能告诉你,劳资岂不是找死,打个马虎眼就过去了,曹操什么也没问出来: 刘备回到家里,跟关羽说,二弟,哼,曹操那个傻吊,哼! 关羽晚上也回到家里,跟老婆说,哼,大哥那个傻吊,哼!我这就去告诉丞相: 曹操也不能罢休,就去问关羽,关羽正要去告密,就一五一十  ¥%…@?%%:

浅谈JavaScript闭包

一.背景知识 在介绍闭包之前,我觉得有必要先简单的介绍一些背景知识,如变量的作用域.嵌套函数.垃圾回收机制等概念. 1.作用域 作用域是程序运行时变量可被访问的范围,定义在函数内的的变量是局部变量,局部变量的作用域只能是函数内部范围内,它不能在函数外引用.定义在模块最外层的的变量是全局变量,它是全局范围内可见的,当然在函数里面也可以读取到全局变量的. var a = 123; //全局变量 function fun(){ var b = 456; //局部变量 } 2.嵌套函数 函数不仅可以定义

Javascript闭包!

# javascript闭包(Closure) > 所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 上面是官方的解释,但这解释只会让人头晕.要理解闭包,首先理解两点:变量的作用域以及作用域链,这两个在前面都已经介绍过了,并且举了简单了列子,来回顾一下: var color = "blue";       function changeColor(){              var anotherColo

JavaScript闭包(二)——作用

一.延迟调用 当在一段代码中使用 setTimeout 时,要将一个函数的引用作为它的第一个参数,而将以毫秒表示的时间值作为第二个参数. 但是,传递函数引用的同时无法为计划执行的函数提供参数.可以在代码中调用另外一个函数,由它返回一个对内部函数的引用,再把这个对内部函数对象的引用传递给 setTimeout 函数.执行这个内部函数时要使用的参数在调用返回它的外部函数时传递. var outer = 'in outter'; setTimeout(function () { echo(pclosu

理解js闭包原理

各种专业文献上的"闭包"(closure)定义非常抽象,很难看懂.我的理解是,闭包就是能够读取其他函数内部变量的函数. 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数". 所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁. 闭包可以用在许多地方.它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中. 怎么来理解这句话呢?请看下面的

精华分享:深爱—— javascript 闭包

上次一篇简单的干货分享,只想让你分分钟学会javascript中的闭包,这就好比一辆车摆在你面前让你束手无策,我只想让你简单的学会驾驶它,仅此而已.而这次我们将从原理层面分析 javascript 引擎如何执行一段代码.一个函数,以及如何形成一个闭包,让你从“爱的初体验” 变得 “深爱” . 1 var a = 1; 2 3 function f1(b){ 4 var a = 2; 5 function f2(c){ 6 console.log(a+b+c); 7 } 8 return f2;