Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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/1/typescript/9.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 听js变量的变化_Javascript_Typescript_Scope_Window - Fatal编程技术网

Javascript 听js变量的变化

Javascript 听js变量的变化,javascript,typescript,scope,window,Javascript,Typescript,Scope,Window,假设在位置2中有一个代码 var place2IsReady = true; 在位置1中我需要实现以下逻辑: Once place2IsReady value was changed (to true) then display alert('ready!'); 注: place2isrady变量在place 1的范围内不可用 在执行位置2之前执行位置1中的代码(或者存在竞态条件) 解决方案1 我相信我可以改为使用window.place2isrady,并在位置1中使用setTimeou

假设在位置2中有一个代码

var place2IsReady = true;
位置1中我需要实现以下逻辑:

Once place2IsReady value was changed (to true) then display alert('ready!');
注:

  • place2isrady变量在place 1的范围内不可用
  • 在执行位置2之前执行位置1中的代码(或者存在竞态条件)
解决方案1

我相信我可以改为使用window.place2isrady,并在位置1中使用setTimeout/setInterval,直到得到
window.place2isrady===true

还有更好的选择吗?使用侦听器?关于变量变化

另外,我只需要跟踪第2个位置的第一个可能的变化


有更好的办法吗?谢谢。

您可以使用
setTimeout
创建变量更改的侦听器,类似于:

让place2isrady=false;
setReadyListener();
//测试等待2秒钟将place2isrady设置为true
//因此:警报应在2秒后出现
setTimeout(()=>place2isrady=true,2000);
函数setReadyListener(){
常量readyListener=()=>{
如果(位置2重复){
返回警报(“准备就绪!”);
}
返回setTimeout(readyListener,250);
};
readyListener();

}
假设您可以用对象替换place2isrady:

place2IsReady = {
  state: false,
  set ready(value) {
      this.state = value
      state && place_1_call()
  },
  get ready() { 
    return state
  }
}

place_1_call = () => {
  alert('ready')
}

place2IsReady.ready = true

您正在使用一些框架吗?变量不会对更改发出任何形式的通知。您必须不断轮询并检查变量是否已更改,或者实际使用某种模式或库来跟踪更改。@远离我的首选答案:否。在某些地方使用JS+TS+jQuery。香草JS解决方案更可取。“place2IsReady”可以是一个对象而不是布尔值?不确定您到底在寻找什么,但您可以使用getter/setter在执行setter调用时执行依赖操作。谢谢。请您解释一下为什么place2isrady=true;place2isrady=false;place2isrady=true;没有显示第二个警报?我可以,如果我明白你的意思meant@Kooilnc,收到了,谢谢,只执行了一次。