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

  • 相关阅读:
    Mysql 从入门到遗忘
    Centos7开放及查看端口
    创建及修改数据库
    02_python是一种什么语言?
    03_SQL server数据类型
    02_关系数据库
    01_初识数据库
    kali 更新源
    01_Python简介
    Alertmanager高可用
  • 原文地址:https://www.cnblogs.com/memphis-f/p/12059907.html
Copyright © 2011-2022 走看看