JavaScript

js 静态作用域和动态作用域

2019-11-07  本文已影响0人  古月丶

静态作用域:函数声明的时候就已经确定作用域。
动态作用域:函数调用的时候确定作用域。

js采用的是静态作用域,也称词法作用域。

var a = 1;
function func() {
  console.log(a)
}
function func2() {
    var a = 2;
    func();
}
func2();
// 打印 1

func2 被调用,func2 中的 func 被调用,执行 console.log(),在 func 函数中未找到变量 a,于是去查找外层作用域,由于 js 是静态作用域,func 是在全局作用域中定义的,所以会去全局作用域查找变量,于是打印1。

var a = 1;
function func2() {
    var a = 2;
    
    function func() {
      console.log(a)
    }
    func()
}
func2();
// 打印 2

因为 func 是在 func2 中被定义,当在 func 中未找到变量a,于是去外层 func2 中查找,找到变量a = 2,打印2,执行完成。

上一篇下一篇

猜你喜欢

热点阅读