先解释一下什么是“自由变量”。在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量。如下图如上程序中,在调用fn()函数时,函数体中第6行。取b的值就直接可以在fn作用域中取,因为b就是在这里定义的。而取x的值时,就需要到另一个作用域中取。...
分类:
编程语言 时间:
2014-09-25 16:45:19
阅读次数:
238
我们拿文字总结一下取自由变量时的这个“作用域链”过程:(假设a是自由量)
第一步,现在当前作用域查找a,如果有则获取并结束。如果没有则继续;
第二步,如果当前作用域是全局作用域,则证明a未定义,结束;否则继续;
第三步,(不是全局作用域,那就是函数作用域)将创建该函数的作用域作为当前作用域;
第四步,跳转到第一步。...
分类:
编程语言 时间:
2014-09-25 16:43:19
阅读次数:
185
作用域只是一个“地盘”,一个抽象的概念,其中没有变量。要通过作用域对应的执行上下文环境来获取变量的值。同一个作用域下,不同的调用会产生不同的执行上下文环境,继而产生不同的变量的值。所以,作用域中变量的值是在执行过程中产生的确定的,而作用域却是在函数创建时就确定了。所以,如果要查找一个作用域下某个变量的值,就需要找到这个作用域对应的执行上下文环境,再在其中寻找变量的值。...
分类:
编程语言 时间:
2014-09-25 11:06:59
阅读次数:
246
其实,你光知道“javascript没有块级作用域”是完全不够的,你需要知道的是——javascript除了全局作用域之外,只有函数可以创建的作用域。所以,我们在声明变量时,全局代码要在代码前端声明,函数中要在函数体一开始就声明好。除了这两个地方,其他地方都不要出现变量声明。而且建议用“单var”形式。...
分类:
编程语言 时间:
2014-09-24 22:31:08
阅读次数:
237
该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分——原型和作用域,当然,肯定少不了原型链和作用域链。帮你揭开javascript最神秘的面纱。...
分类:
编程语言 时间:
2014-09-23 23:18:15
阅读次数:
261
嵌套函数即作用域链;嵌套函数即闭包函数表达式即延迟执行匿名函数----------->实现块级作用域call会切换到调用的对象参数环境。
分类:
编程语言 时间:
2014-09-18 23:36:34
阅读次数:
176
JavaScript中的作用域链和闭包2012-06-29 11:411878人阅读评论(46)收藏举报 JavaScript中出现了一个以前没学过的概念——闭包。何为闭包?从表面理解即封闭的包,与作用域有关。所以,说闭包以前先说说作用域。作用域(scope) 通常来说一段程序代码中使用的变量和.....
分类:
编程语言 时间:
2014-09-18 11:20:03
阅读次数:
333
说明: 该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分——原型和作用域,当然,肯定少不了原型链和作用域链。帮你揭开javascript最神秘的面纱。 为什么要偏偏要讲这两个知识点? 这是我在这...
分类:
编程语言 时间:
2014-09-17 21:44:12
阅读次数:
240
变量、作用域和内存问题执行环境共有两种类型——全局和局部作用域链会加长,有两种情况:try-catch语句的catch块,with语句.javascript没有块级作用域,即在if,for循环中的变量,在块结束后,并不会被销毁.最好能手工断开原生javascript对象与DOM元素之间的连接。Obj...
分类:
编程语言 时间:
2014-09-15 14:16:59
阅读次数:
237
闭包的四个概念,执行环境,活动对象,作用域,作用域链当定义一个函数的时候,这个函数的作用域就确定了,整个函数体就是执行环境,如果该函数是全局函数,那么它的作用域链就只要window对象,当调用函数的时候,会创建一个活动对象,arguments属性添加在活动对象上,当子函数(嵌套函数)访问一个变量时,...
分类:
Web程序 时间:
2014-09-12 16:46:23
阅读次数:
279