zoukankan      html  css  js  c++  java
  • JS作用域相关知识(#精)

    在学习《你不知道的JS》一书中,特将作用域相关知识在此分享一下:

    #说到作用域,就不得不提到LHS查询和RHS查询:

    1)如果查询目的是对变量进行赋值,则使用LHS查询

    2)如果查询目的是获取变量的值,则使用RHS查询

    作用域的查询都会从当前执行的作用域开始查找,如果没有找到所需要的标识符,就会向上级作用域继续查找,直到抵达全局作用域为止

    # 当进行RHS查询时无法找到该变量,引擎则会抛出ReferenceError的异常

    代码示例如下:

            function foo(a){
                console.log(a+b);
                b = a;
            }
            foo(2);

    在此代码示例中未声明b变量,因此RHS查询时无法找到它,则抛出ReferenceError异常

    #当RHS查询时找到了变量,但试图对一个非函数类型的值进行函数调用,或者引用null或undefined类型的值中的属性,则引擎会抛出另一种异常:TypeError

    在作用域查找中还有非常重要的一点: "遮蔽效应"

    作用域查找会在找到第一个匹配的标识符时停止,在多层嵌套作用域中可以定义同名的标识符,叫做'遮蔽效应'

    代码示例如下:

            var b = 4;
            function foo(a){
                var b = 3;
                console.log(a+b);
    
            }
            foo(2);//5

    这里由于作用域查找中具有遮蔽效应,引擎会先找到执行作用域中的 var b = 3,将执行作用域名之外的 var b = 4遮蔽,因此即便外面也用的是相同的变量b作为标识符,也并不影响函数的执行

    那么如何来访问那些被同名变量所遮蔽的全局变量呢,在这里,我们可以引入window.a的技术;

    注意:通过这种技术可以访问那些被遮蔽的全局变量,但非全局的变量被遮蔽则无论如何都无法被访问

  • 相关阅读:
    最短母串
    noip模拟测试7
    linux下的对拍程序
    noip模拟测试6
    QWidget 前后位置设定
    C++编程规范_第5~13条 设计风格
    random /timer/sort 示例代码
    资料准备
    【转】三维动态数组 分配与释放
    批量修改文件名
  • 原文地址:https://www.cnblogs.com/wccc/p/6698747.html
Copyright © 2011-2022 走看看