词法作用域

2017-10-22

作用域是什么

作用域(scope)是指名字(name)与实体(entity)的绑定(binding)保持有效的那部分计算机程序 wiki

作用域规定了如何查找变量

词法作用域与动态作用域

  • 词法作用域的函数中遇到非形参非局部变量的时候,去函数定义的env中查询

  • 动态作用域的函数中遇到非形参非局部变量的时候,去函数调用的环境中查询

JS采用的是词法作用域(静态作用域)

举个栗子:

var value = 1

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

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

bar() // 1
  1. 采用词法作用域 执行 foo 函数,foo 函数内部没有查找到局部变量 value,则在定义函数的环境中查找,value = 1,所以打印 1

  2. 采用动态作用域(bash) 执行 foo 函数,foo 函数内部没有查找到局部变量 value,则从函数调用的作用域中查找,value = 2,所以打印 2

锁窗前月明色, 雕阑外夜气清