JavaScript闭包与变量的经典问题】的更多相关文章

许多人第一次接触闭包大概都是从高程里这段代码开始的: function createFunctions() { var result = new Array(); for(var i=0; i<10; i++) { result[i] = function() { return i; } } return result; }var foo = createFunction(); 或者是用for循环在给网页中一连串元素绑定例如onclick事件时. 所有的教材在讲到这一点时都会给出这样的解释: 因…
1.闭包与变量 JavaScript中的作用域链的机制引出了一个副作用,即闭包只能取得包含函数中任何变量的最后一个值.闭包所保存的是整个变量对象,而不是某个特殊的值. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function createFunctions(){      var result=new Array();               for (var i=0;i<10;i++){          result[i]=function(){        …
说到闭包,大部分的初始者,都是谈虎色变的.最近对闭包,有了自己的理解,就感觉.其实我们误解闭包.也被网上各种说的闭包的解释给搞迷糊. 一句话:要想理解一个东西还是看权威的东西. 下面我来通俗的讲解一个闭包的知识.(建议大家去读JavaScript权威指南) 我们先弄明白几个问题: 1.作为命名空间的函数: 在函数中声明的变量在整个函数体内都是可见(包括嵌套的函数)在函数的外部不是可见的.不在任何函数内声明的是全局变量 ===>也就是说:一个函数它就是一个作用域,不管你里面有什么东西.他们都是一家…
今天遇到一个面试题,结果让我百思不得其解.后来在查阅了各种文档后,理清了来龙去脉.让我们先来看看这道题: function Foo( ){ var i = 0; return function( ){ console.log(i++); } } var f1 = Foo( ),f2 = Foo( ); f1( ); f1( ); f2( ); 大眼一看,我的答案是0,0,0.因为无论怎么调用 i 都被初始化为0了啊!然而正确的答案是0,1,0.其实这道题考察的是闭包和++i和i++的区别: 当调…
javaScript在多人协作时,如果定义过多的全局变量 有可能造成全局变量命名冲突,使用闭包来解决功能对变量的调用 将变量写到一个独立的空间里面 就是闭包里面 var name = "外部name"; var init = (function(){ var name = "内部name"; function callName(){ console.log(name); //打印name } return function(){ callName(); //形成接口…
使用JavaScript编写插件或团队协作时,可使用闭包来解决此类以下两个问题: 1.定义过多全局变量,可能会造成全局变量命名冲突: 2.在插件内定义变量,需要保护该变量不被轻易修改: 优点:可以把局部变量驻留在内存中,可以避免使用全局变量:在调用过后不会被垃圾机制回收: 缺点:避免滥用闭包,占用更多内存的缺点,用完要及时让垃圾回收器回收 ( fn=null)应及时解除引用,否则会占用更多存: 闭包简单示例 最后一步return了一个函数,这个函数callName可将闭包内部变量值取出,也就避免…
最近在学习前端知识,看到javascript闭包这里总是云里雾里.于是翻阅了好多资料记录下来本人对闭包的理解. 首先,什么是闭包?看了各位大牛的定义和描述各式各样,我个人认为最容易一种说法: 外部函数执行完成之后,内部函数依然可以访问外部函数的成员变量.这种现象叫做闭包 看看下面的代码: function a () { var temp = "hello world"; function b () { alert(temp); } return b; } var test = a();…
一.什么是闭包?"官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包.不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的"闭包".看下面这段代码: functiona(){ vari=0; functionb(){ alert(++i…
一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数…
一.什么是闭包?  “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相信很少有人能直接看懂这句话,因为他描述的太学术.我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的.看下面这段代码: 复制代码 代码如下: function a(){ var i=0; function b(){ alert(++i); } return b; } va…