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

时间:2014-01-28 17:41:56

标签: javascript scope

我最近发现了这个陈述的许多版本:

  

每个函数对象都有自己的一组变量,这些变量是已解析   在每个函数的范围内。

我理解范围,但我很难找到(通过谷歌搜索)很多关于“解决”这个词在这种情况下的含义。

2 个答案:

答案 0 :(得分:5)

此处的解决方案是在您拥有其名称时找到变量的过程。

ECMAScript spec

的话说
  

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

如果是嵌套作用域,则从最内部作用域开始,然后向外移动,直到找到具有名称的变量为止。

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

var a = 1;
function fun(){
  var a = 2;
     console.log(a); 
}
fun(); // logs 2

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

var a = 1;
function make_fun(a){
  return function(){
     console.log(a); 
  }
}
var fun = make_fun(2);
fun(); // logs 2

创建f时,它会获取外部作用域的变量(构建闭包的make_fun的调用),其中包含a

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

  • 全球范围
  • 函数调用

块不会创建范围。

答案 1 :(得分:2)

变量名称在范围内“搜索”,实际上是“this”对象或全局对象。

搜索将“myproperty”之类的名称“解析”为对象或值的引用。

因此,解析意味着将代码中的名称表示转换为JS引擎内的引用,这在运行时完成。

某些引擎(如谷歌的V8)使用动态编程来加快后续传递的分辨率。

示例:

var o = { hello : { my : { obj : "ciao" } } };

alert(o.hello.my.obj); // will display "ciao"

这三个对象文字互相嵌套。链中的每个“链接”都需要引擎在对象内搜索该名称:

hello inside o
my inside o.hello
obj inside o.hello.my
相关问题