这个问题在这里已有答案:
在JavaScript中,在函数中创建的变量仅在该函数中具有范围:如果是这种情况,为什么以下代码生成输出1?当然x
不能从foo
外面访问?
function foo(){
x = 1;
}
foo()
console.log(x) // '1'
因为您已分配给没有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);
在您的代码中,您只在函数的一侧初始化变量而不使用var,let或const,因此JavaScript将其视为globe变量
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)