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的技术;

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

  • 相关阅读:
    Could not resolve com.android.support:appcompat-v7:28.0.0 错误处理
    解决 Could not resolve com.android.tools.build:gradle:3.1.3
    https://maven.google.com 连接不上的解决办法(转)
    jquery操作select(取值,设置选中)
    django 使用 request 获取浏览器发送的参数
    jquery下载,实时更新jquery1.2到最新3.3.1所有版本下载
    myeclipse 8.5反编译插件失效
    再探java基础——对面向对象的理解(2)
    庖丁解牛FPPopover
    去大连
  • 原文地址:https://www.cnblogs.com/wccc/p/6698747.html
Copyright © 2011-2022 走看看