何谓';已解决';,说到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之前)是
- 全球范围
- 函数调用
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演算中正式称为绑定的东西。所以你的困惑是可以理解的。