"解决"是什么意思,谈到JavaScript函数范围内的变量?

Bry*_*son 2 javascript scope

我最近遇到过这个声明的许多版本:

每个函数对象都有自己的变量集,这些变量 在每个函数的范围内得到解析.

我理解范围,但是我很难找到(通过谷歌搜索)很多关于"解决"这个词在这个背景下意味着什么.

Den*_*ret 5

这里的解决方案是在您拥有其名称时找到变量的过程.

ECMAScript规范来说:

标识符解析是使用正在运行的执行上下文的LexicalEnvironment确定标识符绑定的过程

对于嵌套作用域,从最内部作用域开始,然后向外移动,直到找到具有名称的变量.

这是一个非常基本的例子:

var a = 1;
function fun(){
  var a = 2;
     console.log(a); 
}
fun(); // logs 2
Run Code Online (Sandbox Code Playgroud)

这是介绍闭包的一个非常简单的例子:

var a = 1;
function make_fun(a){
  return function(){
     console.log(a); 
  }
}
var fun = make_fun(2);
fun(); // logs 2
Run Code Online (Sandbox Code Playgroud)

f创建时,它采用外部作用域的变量(其调用make_fun构建闭包),其中包括a.

重要的是要记住JavaScript中的范围(好吧,在ES6之前)

  • 全球范围
  • 函数调用

块不会创建范围.