javascript原理--> 作用域

64 阅读1分钟

什么是作用域?

scope 在任何编程语言中,都有一套定义变量值、变量作用范围的规则,这个规则就是作用域。

作用域决定了代码区块中变量和其他资源的可见性。

作用域主要有两种模型:

  • 一种是词法作用域,这是大多数编程语言采用的模型,JavaScript 采用的也是这种工作模型;
  • 另一种是动态作用域。

简单地说,词法作用域就是定义在词法阶段的作用域。

  1. 词法作用域由你在写代码时将变量和块作用域写在哪里决定,并且在词法分析阶段保持不变

  2. 动态作用域是关联在程序执行期间的,对于函数来说就是函数执行的位置决定这个函数所属的范围

查看一个例子


var value = 1;

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

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

bar();

// 结果是 ???

js 采用词法作用域,在函数 foo定义的位置,value值为 1, 所以,console打印 1。

js的作用域分类

  • 全局作用域
  • 函数作用域
  • 块作用域