几乎所有编程语言最基本的功能之一,就是能够储存变量当中的值,并且能在之后对这个值进行访问或修改。事实上,正是这种储存和访问变量的值的能力将状态带给了程序。 若没有了状态这个概念,程序虽然也能够执行一些简单的任务,但它会受到高度限制,做不到非常有趣。 但是将变量引入程序会引起几个很有意思的问题,也... 查看全部[ 1.1 编译原理 ]
我们学习作用域的方式是将这个过程模拟成几个人物之间的对话。那么,由谁进行这场对话呢? 1.2.1 演员表 首先介绍将要参与到对程序var a = 2; 进行处理的过程中的演员们,这样才能理解接下来将要听到的对话。 • 引擎 从头到尾负责整个JavaScript 程序的编译及执行过程... 查看全部[ 1.2 理解作用域 ]
我们说过,作用域是根据名称查找变量的一套规则。实际情况中,通常需要同时顾及几个作用域。 当一个块或函数嵌套在另一个块或函数中时,就发生了作用域的嵌套。因此,在当前作用域中无法找到某个变量时,引擎就会在外层嵌套的作用域中继续查找,直到找到该变量, 或抵达最外层的作用域(也就是全局作用域)为止。 考... 查看全部[ 1.3 作用域嵌套 ]
为什么区分LHS 和RHS 是一件重要的事情? 因为在变量还没有声明(在任何作用域中都无法找到该变量)的情况下,这两种查询的行为是不一样的。 考虑如下代码: function foo(a) { console.log( a + b ); b = a; } foo( 2 ); 第一次对b... 查看全部[ 1.4 异常 ]
作用域是一套规则,用于确定在何处以及如何查找变量(标识符)。如果查找的目的是对变量进行赋值,那么就会使用LHS 查询;如果目的是获取变量的值,就会使用RHS 查询。 赋值操作符会导致LHS 查询。=操作符或调用函数时传入参数的操作都会导致关联作用域的赋值操作。 JavaScript 引擎首先... 查看全部[ 1.5 小结 ]