在窗口中将空字符串指定为属性是否有任何缺点?
例如:
window[""] = function() {
console.log("foo");
}
(); // will log foo
编辑:当然,这会将内容放在内容中以便澄清。你可能想要这个:
window[""] = function(prop) {
console.log(prop);
return prop;
}
进一步编辑:以上代码是各种IIFE。哎呀。这就是我不喜欢自动分号插入的原因:
window[""] = function() {
console.log("foo");
}();
答案 0 :(得分:7)
您的代码不正如您所想的那样运行。
();
这实际上是一个语法错误。
试试这个,看看:
window[""] = function() {
console.log("foo");
};
();
您的代码实际上被解释为(}
和()
之间的空格被忽略):
window[""] = function() {
console.log("foo");
}();
运行匿名函数并将其返回值(undefined
)设置为window[""]
。
这就是分号很重要的原因!
有效将空字符串设置为对象的属性。但是,由于它不是有效的标识符(空白字符串),因此如果不执行window[""]
,则无法访问它。
window[""] = function() {
console.log("foo");
};
window[""](); // logs "foo"