javascript(js)词法作用域以及动态作用域

r囧r小猫 2022-10-31 04:08 349阅读 0赞
词法作用域(静态作用域)
词法作用域就是定义在词法阶段的作用域,是由写代码时将变量和块作用域写在哪里来决定的
  1. function foo(a) {
  2. var b = a * 2;
  3. // a=1 b=2 c=4
  4. function bar(c) {
  5. console.log( a, b, c );
  6. }
  7. bar(b * 2);
  8. }
  9. foo( 1 ); // 1 2 4
  10. // bar首先会从bar内部寻找a,b,c.
  11. // 所以bar会找到c = 4; a,b没有,往上一层找.
  12. // 找到a = 2 , b = 4
动态作用域
动态作用域并不关心函数和作用域是如何声明以及在任何处声明的,只关心它们从何处调用。换句话说,作用域链是基于调用栈的,而不是代码中的作用域嵌套
  1. var a = 2;
  2. function foo() {
  3. console.log( a );
  4. }
  5. function bar() {
  6. var a = 3;
  7. foo();
  8. }
  9. bar();
  10. // 1.如果处于词法作用域,也就是现在的javascript环境。
  11. 变量a首先在foo()函数中查找,没有找到。
  12. 于是顺着作用域链到全局作用域中查找,找到并赋值为2
  13. 所以控制台输出2
  14. // 2.如果处于动态作用域,同样地,变量a首先在foo()中查找,没有找到。
  15. 这里会顺着调用栈在调用foo()函数的地方,也就是bar()函数中查找,找到并赋值为3
  16. 所以控制台输出3
区别
词法作用域是在定义时确定的,而动态作用域是在运行时确定的

参考链接

发表评论

表情:
评论列表 (有 0 条评论,349人围观)

还没有评论,来说两句吧...

相关阅读

    相关 词法作用(marksheng)

    作用域模式 作用域的工作模式分为两种,静态作用域与动态作用域 其中静态作用域包括函数作用域和块作用域 可能同学要问那么词法作用域呢 其实词法作用域和静态作用域

    相关 JavaScript笔记:词法作用

    1、词法阶段 简单地说,词法作用域就是定义在词法阶段的作用域。 后面会介绍一些欺骗词法作用域的方法,这些方法在词法分析器处理过后依然可以修改作用域,但是这种机制

    相关 词法作用

    1、概念 变量的作用域 是由代码 书写的位置决定 而不是 变量被使用的位置决定;只有函数可以限定作用域。 2、作用域链 在JavaScript中使用变量,Java