为什么没有在object方法中声明var的变量不会成为全局变量

Why variable declared without a var in object method does not become a global variable?

本文关键字:变量 全局变量 var 声明 object 方法 为什么      更新时间:2023-09-26

谁能解释一下……

为什么没有声明varbaz没有成为全局variable ?

const foo = {
   bar(baz) {
   if (!baz)
   baz = 1;
   }
}

因为它被声明为函数参数1:

const foo = {
   bar(baz) {
//     ^-------- here
       if (!baz)
           baz = 1;
   }
}

(bar是使用ES2015方法定义语法声明的函数)

如果它不是参数,例如:

const foo = {
   bar() {
//     ^----------------- no baz
       if (!baz)
           baz = 1;
   }
}

…那么当调用foo.bar()时,如果baz没有定义,它将是ReferenceError(因为隐式全局变量2只适用于赋值给未声明的符号,而不是从它们读取)。


1我们经常称这些为"参数",但从技术上讲,"参数"是在给定调用中传递的实际值;请参阅MDN和维基百科了解其区别。

2这是我贫血的小博客上的一篇文章。

因为它是一个参数

将它包含在函数声明中隐式地声明它用于给定的函数作用域。

因为您将其设置为函数的参数。为了使var成为"全局的"(这可能会削弱程序的弹性,应该避免),你应该在函数之外声明它。