如何防止在Javascript中定义对象,函数或变量两次?

时间:2014-04-16 02:06:36

标签: javascript variables global-variables undefined

如何防止对象,函数或变量被定义两次?

例如:

window.foo = (window.foo || (function(){

  window.foo = true;

  console.log("111");

}()));

window.foo = (window.foo || (function(){

  window.foo = true;

  console.log("222");

}()));

我希望它只输出" 111"。

5 个答案:

答案 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;

}()));

http://jsfiddle.net/x2fyM/

答案 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/