何谓';已解决';,说到JavaScript函数中的变量';什么范围?

何谓';已解决';,说到JavaScript函数中的变量';什么范围?,javascript,scope,Javascript,Scope,我最近遇到过许多版本的这种说法: 每个函数对象都有自己的一组变量,这些变量是解析的 在每个函数的范围内 我理解范围,但我很难(通过谷歌搜索)找到“解析”这个词在上下文中的含义。解析这里是当你有了变量名时,发现变量的过程 用以下的话来说: 标识符解析是确定标识符绑定的过程 使用正在运行的执行的LexicalEnvironment的标识符 上下文 在嵌套作用域的情况下,从最内部的作用域开始,然后到外部,直到找到一个名为的变量 下面是一个非常基本的示例: var a = 1; function fun

我最近遇到过许多版本的这种说法:

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


我理解范围,但我很难(通过谷歌搜索)找到“解析”这个词在上下文中的含义。

解析这里是当你有了变量名时,发现变量的过程

用以下的话来说:

标识符解析是确定标识符绑定的过程 使用正在运行的执行的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之前)是

  • 全球范围
  • 函数调用
块不创建作用域。

变量名在作用域内“搜索”,而作用域实际上是“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

我只是在等你详细解释一下,给你+1。你能提供一个基本的例子吗?那么,当它“需要”a时,你会说a已经解决了吗?@dystroy明白了。现在一切都有意义了。谢谢你花时间。我想这意味着要找出它们是什么。如果您在任何地方使用
var x
,则无论外部函数中是否有任何其他
x
,您都有一个本地
x
,或一个全局
x
。如果您说
y=10
,则函数将尝试将本地
y
设置为
10
(如果存在);如果没有,它将设置最近外部函数的
y
;如果连这个都找不到,你就创建了一个全局的
y
,它的值是
10
。dystroy的答案是正确的,我只想提到术语“resolution”基本上是非正式的玩笑,指的是二阶谓词逻辑和lambda演算中正式称为绑定的东西。所以你的困惑是可以理解的。