Javascript函数范围变量在全局范围内可用

时间:2017-12-20 15:57:03

标签: javascript

在JavaScript中,在函数中创建的变量仅在该函数中具有范围:如果是这种情况,为什么以下代码生成输出1?当然x无法从foo外部访问?

function foo(){
  x = 1;
}
foo()
console.log(x) // '1'

2 个答案:

答案 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)




相关问题