Javascript函数范围变量在全局范围内可用[重复]

问题描述 投票:1回答:2

这个问题在这里已有答案:

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

function foo(){
  x = 1;
}
foo()
console.log(x) // '1'
javascript
2个回答
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);

0
投票

在您的代码中,您只在函数的一侧初始化变量而不使用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)
© www.soinside.com 2019 - 2024. All rights reserved.