2014-06-15 W.Y.
本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 6. Closures. 其中大部分参考了 goddyzhao 的翻译。 概述 本文将介绍在 JavaScript 中大家经常讨论的话题 -- 闭包(Closure)。事实上,闭包是个老生常谈的话题了,管如此,这里还是要试着从理论角度来讨论下闭包,看看 ECMAScript 中的闭包内部究竟是如何工作的。 正如在此前文章中提到的,这些文章都是系列文章,相互之间都是有关联的。因此,为了更好的理解本文要介绍的内容, 建议先去阅读下第四章 作用域链和第二章 变量对象。 more 概论 在开始讨论 ECMAScr 继续阅读 »
2015-06-14 浩阳
content {:toc} 本文为慕课网 JavaScript深入浅出 JavaScript 中的闭包笔记。 闭包的例子 function outer() { var localVal = 30; return localVal; } 继续阅读 »
2016-03-11 Li Shuai
延迟绑定 Python闭包函数所引用的外部自由变量是延迟绑定的。 In [2]: def multipliers(): ...: return [lambda x: i * x for i in range(4)] In [3]: print [m(2) for m in multipliers()] [6, 6, 6, 6] 如以上代码: i是闭包函数引用的外部作用域的自由变量, 只有在内部函数被调用的时候才会搜索变量i的值, 由于循环已结束, i指向最终值3, 所以各函数调用都得到了相同的结果。 解决方法: 1) 生成闭包函数的时候立即绑定(使用函数形参的默认值): In [5]: def multip 继续阅读 »
2014-03-10 W.Y.
面试或被面试时基本都会涉及到这个最原始的 JavaScript 基础问题,试想一下您有没有在某些时候向别人解释这些概念时,把自己给绕进去了;网络上偶遇一篇英文文章,细读之后觉得有参考价值,文章不长,就顺手翻译了一下,希望某些同学可以用的上。 原文文中的 Scope 翻译成中文是“变量作用域”,译文某些地方直接简称为“作用域” ,Closure 翻译后是“闭包”。Rebort Nyman 的原文是 Explaining JavaScript Scope And Closures,某些不清楚的地方可以直接参考原文。 以下是译文 背景 很多文章或博客都在试着解释作用域和闭包,但大多数都没有解释的很清楚(crystal-clear) 继续阅读 »
2016-10-12 曹强
闭包是js中一个难懂又必须征服的概念,他的形成与变量作用域以及变量的生存周期密切相关。 变量作用域和生存周期 作用域,按字面理解,就是指变量的有效范围,超出这个范围就无法访问。 在函数中,里面函数可以访问外面的变量,但是外面无法访问内部变量。举个简单例子: var a = 1; var fun1 = function() { var b = 2; var fun2 = function() { var c = 3; alert(b); //2 alert(c); //3 } fun2(); alert(c); //c is not de 继续阅读 »
2016-07-29 曹强
定义函数有两种方式:函数声明和函数表达式。它们之间一个重要的区别是函数提升。 1.函数声明会进行函数提升,所以函数调用在函数声明之前也不会报错: ``` test(); function test(){ alert(1); } ``` 2.函数表达式不会进行函数提升,函数调用在函数声明之前的话会报错: ``` test(); // test is not a function var test=function(){ alert(1); } ``` 递归函数是通过在函数内部调用自身实现的。 直接使用函数名进行递归调用 ``` function f(num){ if(num==1){ r 继续阅读 »
2016-09-10 曹强
写在前面 singleton模式是被熟知的原因是因为它限制了类的实例化次数只能一次。从经典意义上来说,singleton模式在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用。 singleton不同于静态类(或对象),因为我们可以推迟它们的初始化,这通常是因为它们需要一些信息,而这些信息在初始化期间可能无法获得、对于没有察觉到之前的引用的代码,它们不会提供方便检索的方法。这是因为它既不是对象,也不是由一个singleton返回的“类”;它是一个结构。 思考一下闭包变量为何实际上并不是闭包,而提供闭包的函数作用域是闭包。在Javascript中,singleton 继续阅读 »
2015-01-12 Jason Liao
Closures are functions that refer to independent (free) variables 闭包是静态方式/词法方式进行存储所有父作用域的一个函数 在 JavaScript 高级程序设计里面通过一个createComparisonFunction()函数和这个函数的作用域链之间的关系图说得很明白为什么闭包可以访问外部函数的变量,是因为闭包的作用域链不仅包括自己本地的活动对象,还包括外部函数作用域链所指向的活动对象 继续阅读 »
2016-06-07 浩阳
content {:toc} 记录一下阅读蝴蝶书的笔记,本篇为第一部分包含书中前三章内容:语法、对象和函数。 原书中第一章为精华,做了一些周边介绍,略去。 继续阅读 »
2015-01-31 W.Y.
在过去,内存泄漏并没有为 Web 开发人员带来巨大的问题。页面保持着相对简单,并且在页面之间的跳转时可以释放内存资源,即便还存在内存泄露,那也是小到可以被忽略。 现在,新的 Web 应用达到更高的水准,页面可能运行数小时而不跳转,通过 Web 服务动态检索和更新页面。JavaScript 语言特性也被发挥到极致,通过复杂的事件绑定、面向对象和闭包等特性构成了整个 Web 应用。面对这些变化,内存泄露问题变得越来越突出,尤其是之前那些通过刷新(导航)隐藏的内存泄露问题。 庆幸的是,如果你知道如何排查问题,内存泄露可以很轻易地被清除。即便是面对一些最麻烦的问题,如果你知道解决方案,也只需要少量的工作。虽然页面仍可能存在一些小的内存泄 继续阅读 »