如果Global var未定义,则立即触发函数

时间:2016-07-21 09:27:08

标签: javascript jquery

我有全局变量,例如在脚本运行时填充的window.remote.storageData。但是,在某些情况下,它明确地变得未定义。在那些情况下,我想触发功能以重新加载它。 我为此使用了setInterval:

setInterval(function(){...},timer);

但是,如果var在定时器范围内未定义,我的代码中出现错误。 微小的计时器差距困在我的应用程序中,那些计时器少于500的解决方案效果不佳。

当变量值发生变化时,是否有一些方法可以立即触发功能?

1 个答案:

答案 0 :(得分:3)

如果您使用ES5浏览器并且未冻结remote,则可以使用自定义get / set定义属性。

(function(remote) {
  var value = remote.storageData;

  try {
    Object.defineProperty(remote, 'storageData', {
       get: function() { return value;}

       set: function(newVal) {
         if(typeof newVal === 'undefined') {
            newVal = //some code to get value
         }

         value = newVal
       }
    })
  } catch(e) {
     console.log(e)
  }
}(window.remote))

但是有些代码仍然可以替换整个window.remote对象。在这种情况下,您需要在remote本身上使用自定义get / set定义window属性。