JavaScript进阶1之作用域、执行上下文的顺序执行、可执行代码、执行上下文栈

本文深入探讨JavaScript中的作用域概念,包括静态作用域和动态作用域的区别,并解释为何JavaScript采用静态作用域。同时,阐述执行上下文的顺序执行原理,通过案例分析函数声明和变量提升的细节。最后,介绍了执行上下文栈的工作机制,帮助理解JavaScript代码的执行流程。
摘要由CSDN通过智能技术生成

作用域

  1. 作用域:程序源代码中定义变量的区域。
  2. 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。
  3. 作用域分类:静态作用域(词法作用域)和动态作用域
    JavaScript是静态作用域
  4. 静态作用域:函数的作用域在函数定义的时候就决定了
  5. 动态作用域:函数的作用域是在函数调用的时候才决定的
var value = 1;

function foo() {
   
    console.log(value);
}

function bar() {
   
    var value = 2;
    foo();
}

bar();

// 结果是 ???

请添加图片描述
JavaScript采用静态作用域,于是执行 foo 函数,先从 foo 函数内部查找是否有局部变量 value,如果没有,就根据书写的位置,查找上面一层的代码,也就是 value 等于 1,所以结果会打印 1。

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

思考

// case 1
var scope = "global scope";
function checkscope(){
   
    var scope = "local scope";
    function f(){
   
        return scope;
    }
    return f();
}
checkscope();   //local scope

// case 2
var scope = "global scope";
function checkscope(){
   
    var scope = "local scope";
    function f(){
   
        return scope;
    }
    return f;
}
checkscope()();  //local scope

结果都是
local scope
JavaScript采用的是词法作用域,函

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值