在JavaScript中,在函数中创建的变量仅在该函数中具有范围:如果是这种情况,为什么以下代码生成输出1?当然x
无法从foo
外部访问?
function foo(){
x = 1;
}
foo()
console.log(x) // '1'
答案 0 :(得分:6)
因为您已分配给没有var, let or const
定义的变量。并且因为您的代码处于非严格模式,所以它被分配给名为window
的全局对象(x
)属性。您可以取消注释use strict
部分,并会看到异常。
// 'use strict';
function foo() {
x = 1;
console.log(window.x);
}
foo();
console.log(window.x);

如果使用关键字声明,则无法在函数外部访问它,它将不在window
对象中。
function foo() {
let x = 1;
console.log(x);
}
foo();
console.log(window.x);

答案 1 :(得分:0)
在你的代码中你只是在没有var,let或const的函数的一边初始化变量所以JavaScript威胁它作为一个全局变量
function foo(){
x = 1;
}
foo()
console.log(x) // '1'

如果使用var,let或const
,以下是它的工作原理
function foo(){
var x = 1;
let y = 1;
const z = 1;
}
foo()
console.log(x)
//console.log(y)
//console.log(z)