• js 词法作用域和动态作用域


    词法作用域,也叫静态作用域,它的作用域是指在词法分析阶段就确定了,不会改变。动态作用域是在运行时根据程序的流程信息来动态确定的,而不是在写代码时进行静态确定的。

    js是本身是词法作用域.举个例子:

    function foo() {
        console.log(a);
    }
    
    function bar() {
        var a = 3;
        foo();
    }
    
    var a = 2;
    bar(); // 2;

    由于js是词法作用域,在词法分析阶段就确定了foo函数获取的是全局作用域里的var a=2;所以无论bar函数里重新定义了a变量 依旧会输出2;

    假设js是动态作用域的话,在程序运行的时候才会确定,所以当程序运行到var a=3的时候 foo的输出自然是3了。

    ##词法作用域代码解析:bar() 会调用 foo(),foo() 再查询所需变量,因为函数是在foo处声明的,所以会从foo所在作用域进行查找,所得结果为"2";

    ##动态作用域代码解析:由于函数是从 bar()开始调用的,因此会从 bar()所在作用域查找变量,因此按照动态作用域的运行结果得到的结果是"3".

    一句话概括:词法作用域关注函数在何处声明,而动态作用域关注函数从何处调用

  • 相关阅读:
    基于SAAJ的客户端
    SOAP消息的结构
    服务端的思考
    最简单的Web Service实现
    PLSQL的注释技巧
    复杂分支图示
    Tomcat常见错误
    maven常见错误
    SpringMvc参数传递中乱码问题
    springmvc常遇到的错误
  • 原文地址:https://www.cnblogs.com/tudou1223/p/9864875.html
Copyright © 2020-2023  润新知