zoukankan      html  css  js  c++  java
  • 词法作用域和动态作用域

    词法作用域和动态作用域

    1、作用域:

    作用域是指程序代码中定义变量的区域

    JavaScript采用词法作用域,也就是静态作用域

    2、词法作用域和动态作用域

    因为JavaScript采用的是词法作用域,函数的作用域在函数定义的时候就决定了。

    而与词法作用域对应的是动态作用域,函数的作用域是在函数调用的时候才决定的。动态作用域并不关心函数和作用域是如何声明以及在何处声明的,只关心他们从何处调用。换句话说,作用域链是基于调用栈的,而不是代码中的作用域嵌套。

    var value = 1;
    function foo() {
        console.log(value);
    }
    function bar() {
        var value = 2;
        foo();
    }
    bar();
    // 结果是???

    假设JavaScript采用静态作用域,分析执行过程:

    执行foo()函数,先从foo函数内部查找是否有局部变量value,如果没有,就根据书写的位置查找上一层的代码,也就是value 等于 1,所以结果会打印 1 。

    假设JavaScript采用动态作用域,分析执行过程:

    执行foo()函数,依然是从foo函数内部查找是否有局部变量value,如果没有,就从调用函数的作用域也就是bar()函数内部查找value变量,所以结果会打印 2 。

    前面已经说了,JavaScript采用的是词法作用域,所以这个例子结果是1

    参考文章:https://www.cnblogs.com/xiaohuochai/p/5700095.html

  • 相关阅读:
    二分法扩展——就近查找
    Right Dominant Elements问题
    数组循环左移
    两个有序序列的中位数
    装箱问题
    IDEA中Tomcat热部署不生效问题解决办法
    H2数据库简单使用操作
    常用网站
    Spring Framwork Maven dependency
    报错Too many connections
  • 原文地址:https://www.cnblogs.com/memphis-f/p/12059907.html
Copyright © 2011-2022 走看看