在《javascript权威指南》中有一句“javascript中的函数是通过词法来划分作用域的,而不是动态的划分作用域的。这意味着,它们在定义它们的作用于运行,而不是在执行它们的作用域里运行。”这句话精辟,但又很难理解。下面讲讲我的看法。
在javascript中一个函数的执行涉及到词法作用域、执行环境、活动对象、作用域链。(这3者的关系见附件图)。
具体的讲一个函数的执行涉及到2个步骤。
1、词法分析阶段。
2、执行阶段。
词法分析阶段已经将所有相应的源代码分析成语法树,构建词法作用域。
执行阶段将构建函数执行环境、相应的调用对象。并且将词法分析阶段所获取的信息添加至执行环境中,而获取作用域链。
举例说明:
function f(x) {
var g = function () { return x; }
return g;
}
var g1 = f(1);
var g2 = f(2);
alert(g1()); //输出 1
alert(g2()); //输出 2
在词法分析阶段,已经成生
var SyntaxTree={
window:{
g1:{value:f(1)},
g2:{value:f(2)}
},
functions:{
f:this.f,
},
f:{
variables:{x:'undefined'},
functions{g:this.g},
scope:this.window //在词法分析阶段已经将所属环境确定下来了,所以 //以后任何地方调用,都是按定义的时候走。
}
g:{
variables:{},
scope:this.f
}
}
执行阶段:
待续。。。。。
================
写累了,休息一下。也不知道有没有人看。
- 大小: 40.9 KB
分享到:
相关推荐
Javascript词法作用域分析 Javascript中的词法作用域分析是指变量的作用域不是在执行时决定的,而是在定义时决定的,也就是说通过静态分析就能确定。因此,词法作用域也叫做静态作用域。 在Javascript中,一个方法...
深化理解javascript作用域其次篇之词法作用域和动态作用域_ 深化理解javascript作用域其次篇之词法作用域和动态作用域,是javascript中非常重要的一部分。理解词法作用域和动态作用域对javascript的编程至关重要。...
JavaScript中的词法作用域是编程中的一个重要概念,它决定了变量的可访问性和作用范围。根据题目描述,我们来深入理解这一知识点。 首先,JavaScript的词法作用域在函数定义时就已经确定,而不是在函数执行时。这...
JavaScript的词法作用域是编程中的关键概念,它决定了变量的可见性和生命周期。在JavaScript中,作用域由函数定义的位置决定,而不是代码块(如if语句或for循环)的位置,这就是所谓的函数作用域。不同于其他一些...
在深入探讨JavaScript中的词法作用域与闭包之前,首先需要了解作用域的概念。作用域定义了变量访问的规则,决定了代码在何处以及如何查找变量。JavaScript中的词法作用域,也就是静态作用域,意味着变量的作用域在...
JavaScript中的词法作用域和调用对象是理解其运行机制的关键概念。词法作用域指的是函数在其被定义时所在的作用域内运行,而非执行时。这意味着函数能够访问在其定义时可及的所有变量和函数,即使在它被调用时这些...
本文是深入理解javascript作用域系列第二篇——词法作用域和动态作用域 词法作用域 第一篇介绍过,编译器的第一个工作阶段叫作分词,就是把由字符组成的字符串分解成词法单元。这个概念是理解词法作用域的基础 ...
例如,JavaScript、Python等语言采用词法作用域。 动态作用域(Dynamic Scoping),又称为运行时作用域,与词法作用域相反,它在程序执行时根据函数的调用链来决定变量的可见性。在动态作用域中,函数查找变量时会...
本文实例讲述了JavaScript词法作用域与作用域链。分享给大家供大家参考,具体如下: 一、作用域 域表示的就是范围,即作用域,就是一个名字在什么地方可以使用,什么时候不能使用。想了解更多关于作用域的问题推荐...
两个例子var scope= 'global scope'var scope= 'global scope'由于JavaScript采用词法作用域,函数的作用域
本文将深入探讨JavaScript中的全局变量、局部变量、变量提升、词法作用域以及作用域链。 1.1 全局变量与局部变量 全局变量在整个程序中都可访问,即使在函数内部定义,它们也会成为全局变量,除非在函数内部重新...
闭包是指函数能够记住并访问其词法作用域,即使在其父函数已经执行完毕后。这种能力使得闭包可以用来实现数据隐藏、模块化和内存管理等高级功能。 理解JavaScript的作用域规则对于编写可维护和高效的代码至关重要。...
"作用域链和闭包:代码中出现相同的变量,...通过了解作用域链、词法作用域和闭包,我们就可以更好地理解JavaScript引擎是如何选择相同的变量的。同时,我们也可以更好地理解JavaScript的执行机制和闭包的应用。