Javascript 局部未声明变量变为全局变量。它们在文档中的什么地方结束?
我对未声明的变量发生了什么以及它在文档中的位置缺乏了解。比如说Javascript 局部未声明变量变为全局变量。它们在文档中的什么地方结束?,javascript,oop,inheritance,javascript-objects,hoisting,Javascript,Oop,Inheritance,Javascript Objects,Hoisting,我对未声明的变量发生了什么以及它在文档中的位置缺乏了解。比如说 var a = 1; function b() { a = 10; return; function a() {} } b(); console.log(a); 随着吊装,将成为 function b () { function a() {} a = 10; return; } var a; a = 1; b(); console.log(a); // output 1 a=10分配给函数b内部的
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
console.log(a);
随着吊装,将成为
function b () {
function a() {}
a = 10;
return;
}
var a;
a = 1;
b();
console.log(a); // output 1
a=10分配给函数b内部的函数a。这样就可以将a=1分配给var a声明。现在,如果我们注释掉函数a,我们会得到不同的输出
function b () {
// function a() {}
a = 10;
return;
}
var a;
a = 1;
b();
console.log(a); // output 10
现在a=10被分配给未声明的变量,所以它变成了全局变量,那么它到底是什么样子的呢?由于变量变异,它会像这样放在文档的底部吗
function b () {
// function a() {}
return;
}
var a;
a = 1;
b();
a = 10;
console.log(a); // output 10
这是否正确?在您的示例中,10未分配给未声明的变量。只要调用
b
,就会执行函数b
中的所有逻辑。发生这种情况时,a
已声明,并且已为其分配了1
由于在函数b的局部变量环境中没有变量a
,因此它被分配给下一个a
,它可以在父变量环境中找到
您可以通过最初将a
声明为常量来测试此行为。它将无法在功能内重新分配10
函数b(){
//函数a(){}
a=10;
返回;
}
常数a=1;
b()//TypeError:赋值给常量变量。
“它会被放在脚本的底部吗?”-不会,它会留在函数中!通常,在调用函数时执行语句(在b();
)。只是标识符a
现在引用了一个不同的(非局部)变量,就像console
引用全局变量一样,如果将console.log()
调用放在函数中,它仍然会引用全局变量。