zoukankan      html  css  js  c++  java
  • 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".

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

  • 相关阅读:
    win10 增加一个新磁盘
    解释mysql 语句
    Impala 中invalidate metadata和refresh
    PPT 设置幻灯片母版
    python 中startswith()和endswith() 方法
    python 把函数的值赋给变量
    python 获取导入模块的文件路径
    MD5 算法
    python 删除特定字符所在行
    JS判断内容为空方法总结
  • 原文地址:https://www.cnblogs.com/tudou1223/p/9864875.html
Copyright © 2011-2022 走看看