有人可以解释一下..
为什么baz
在没有var
的情况下声明的内容未成为全局variable
?
const foo = {
bar(baz) {
if (!baz)
baz = 1;
}
}
答案 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 我们经常松散地称这些“论据”,但“论证”在技术上是在给定的呼叫上传递的实际值;有关区别,请参阅MDN和Wikipedia。
2 这是我贫血的小博客上的帖子。
答案 1 :(得分:2)
因为它是parameter.
在函数声明中包含它会隐式声明给定函数作用域。
答案 2 :(得分:1)
因为您将其设置为函数的参数。为了使var变为“全局”(可以削弱程序的弹性并且应该避免),你应该在函数之外声明它。