如何防止对象,函数或变量被定义两次?
例如:
window.foo = (window.foo || (function(){
window.foo = true;
console.log("111");
}()));
window.foo = (window.foo || (function(){
window.foo = true;
console.log("222");
}()));
我希望它只输出" 111"。
答案 0 :(得分:0)
如果变量尚不存在,则仅将变量设置为第二个函数的值。
if(typeof window.foo === 'undefined'){
window.foo = (window.foo || (function(){
window.foo = true;
console.log("222");
}()));
}
答案 1 :(得分:0)
使用const
。 (虽然只有Firefox和Chrome支持它,但如果您使用const
,所有浏览器都不会抛出错误。)
const cantchange = 123; //can't change
关于您的代码,添加return true
,以便它不会记录222
。
window.foo = (window.foo || (function(){
console.log("111");
return true; //window.foo = true will not work because the function
}())); // is returning false and assigning foo to be false.
window.foo = (window.foo || (function(){
console.log("222");
}()));
答案 2 :(得分:0)
我不认为我会以这种方式接近它,但是你的代码在函数中将window.foo设置为true,但是window.foo然后被重置为未定义的返回值。
你可能想要更像这样的东西。
window.foo = (window.foo || (function(){
console.log("111");
return true;
}()));
window.foo = (window.foo || (function(){
console.log("222");
return true;
}()));
答案 3 :(得分:0)
首先,您应该avoid globals。
但是,要回答这个问题,您可以检查全局变量是否存在:
window.foo = window.foo !== undefined ? window.foo : (function(){window.foo = true;console.log("111");})();
slightly faster比使用typeof
。注意:我使用ternary/conditional operator作为变量赋值,但如果更可读,则可以使用if
语句。
如果你想知道是否有一个实际上已经定义 not 的变量,那么你想使用window.hasOwnProperty('foo')
,因为当变量是一个变量时它不会给出误报设置等于值undefined
。
答案 4 :(得分:0)
我在开源框架中找到了答案:
var Sparky = Sparky || (function() {
console.log("1111");
return {};
})();
var Sparky = Sparky || (function() {
console.log("2222");
return {};
})();
link:http://sparkyjs.com/