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

时间:2016-10-13 21:20:43

标签: javascript

有人可以解释一下..

为什么baz在没有var的情况下声明的内容未成为全局variable

const foo = {
   bar(baz) {

   if (!baz)
   baz = 1;

   }
}

3 个答案:

答案 0 :(得分:5)

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

const foo = {
   bar(baz) {
//     ^-------- here

       if (!baz)
           baz = 1;
   }
}

bar是使用ES2015 method definition语法声明的函数。)

如果它不是参数,例如:

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

...然后在调用foo.bar()时,如果未定义baz,则为ReferenceError(因为Horror of Implicit Globals 2 仅适用于为未声明的符号分配,而不是从它们读取。)

1 我们经常松散地称这些“论据”,但“论证”在技术上是在给定的呼叫上传递的实际值;有关区别,请参阅MDNWikipedia

2 这是我贫血的小博客上的帖子。

答案 1 :(得分:2)

因为它是parameter.

在函数声明中包含它会隐式声明给定函数作用域。

答案 2 :(得分:1)

因为您将其设置为函数的参数。为了使var变为“全局”(可以削弱程序的弹性并且应该避免),你应该在函数之外声明它。