Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果全局变量未定义,则立即触发函数_Javascript_Jquery - Fatal编程技术网

Javascript 如果全局变量未定义,则立即触发函数

Javascript 如果全局变量未定义,则立即触发函数,javascript,jquery,Javascript,Jquery,我有全局变量,例如在脚本运行时填充的window.remote.storageData。但是,在某些情况下,它会变得不明确。在这种情况下,我想触发函数以重新加载它。 我为此使用了setInterval: setInterval(function(){...},timer); 然而,如果变量在计时器范围内变得未定义,我的代码就会出错。 我的应用程序中存在微小的计时器间隙,那些计时器小于500的解决方案无法正常工作 是否有一些方法可以在变量值更改时立即触发函数?如果您使用ES5浏览器并且remot

我有全局变量,例如在脚本运行时填充的
window.remote.storageData
。但是,在某些情况下,它会变得不明确。在这种情况下,我想触发函数以重新加载它。 我为此使用了setInterval:

setInterval(function(){...},timer);
然而,如果变量在计时器范围内变得未定义,我的代码就会出错。 我的应用程序中存在微小的计时器间隙,那些计时器小于500的解决方案无法正常工作


是否有一些方法可以在变量值更改时立即触发函数?

如果您使用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))

但是一些代码仍然可以替换整个
窗口.remote
对象。在这种情况下,您需要在
窗口
本身上使用自定义获取/设置来定义
远程
属性。

如果您使用ES5浏览器并且
远程
未冻结,则可以使用自定义获取/设置来定义属性

(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))

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

或setters/getters是的,它被称为setter:或setters/getters是的,它被称为setter:谢谢,这就是我要找的hanks,这就是我要找的