Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 局部未声明变量变为全局变量。它们在文档中的什么地方结束?_Javascript_Oop_Inheritance_Javascript Objects_Hoisting - Fatal编程技术网

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()
调用放在函数中,它仍然会引用全局变量。