关于javaScript作用域

来源:互联网 发布:金思维网络 编辑:程序博客网 时间:2024/06/05 16:54

编译过程中的赋值

LHS引用和RHS引用

LHS和RHS的含义是“赋值操作的左侧或右侧”并不一定意味着就是“赋值操作符的左侧或右侧”。直观的理解是“复制操作的目标是谁(LHS)”及“谁是复制操作的源头(RHS)”。

作用域查找顺序

作用域查找会在找到第一个匹配的标识字符时停止。在多层的嵌套作用域中可以定义同名的标识符,这叫“遮蔽效应”。抛开遮蔽效应,作用域查找始终从运行时所处的最内部作用域开始,逐级向外或者说向上进行,直到遇见第一个匹配的标识符为止。

在运行期间修改词法作用域的方式(严重影响效率)

  • eval
    eval分两步实现:解释和运行
    在严格模式中,eval()在运行时有着自己的词法作用域,这意味着其中的声明无法修改所在的作用域。
  • with
    with可以快捷的重复引用同一个对象中的多个属性的快捷方式,可以不重复的引用对象本身。
function foo(obj) {    with(obj){        a=2;    }}var o1 = {    a:3;}foo(o1);

with可以将一个没有或有多个属性的对象处理为一份完全隔离的词法作用域,因此这个对象的属性也会被处理为定义在这个域中的词法标识符。
尽管with快可以将一个对象处理为词法作用域,但是这个快内部正常的var声明并不会被限制在这个块中的作用域中,而是被添加到with所处的函数作用域。

原创粉丝点击