亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個作用域的問題,求解答?

一個作用域的問題,求解答?

MMTTMM 2019-04-16 16:58:27
我想要這樣的效果,即:點擊btn按鈕,想要總是實時的獲取a的值,結果只能獲取窗口縮放前a變化的值。其中代碼中的unLoad是為了縮放窗口后,防止btn多次綁定匿名函數。源代碼如下:varbtn=document.querySelector(".btn");varunLoad=true;vartimer=null;functionadd(){vara=1;if(unLoad){btn.addEventListener("click",function(){document.title=a;},false);}clearInterval(timer);timer=setInterval(function(){a++;console.log(a);},1000);unLoad=false;}add();window.addEventListener("resize",function(){add();console.log("resize");},false);后來,我改動了下代碼,把a放到add外面,作為全局變量。varbtn=document.querySelector(".btn");varunLoad=true;vartimer=null;vara=1;functionadd(){if(unLoad){btn.addEventListener("click",function(){document.title=a;},false);}clearInterval(timer);timer=setInterval(function(){a++;console.log(a);},1000);unLoad=false;}add();window.addEventListener("resize",function(){add();console.log("resize");},false);然后縮放窗口前后測試發現,又可以實時獲取a的變化值。另外,如果不把a移出add外面,就像第一段代碼一樣把a作為add的局部函數,但是不對btn做綁定判斷(即去掉外面的if判斷),那么也可以實時獲取a的變化值。我現在的問題是,不能理解,為啥第一段代碼不能實時獲取a的值呢?這種情況下,點擊btn按鈕,不是要去add函數中尋找a的值嗎?而定時器又不斷在改變a的值,a作為add函數的局部變量,應該可以在點擊btn時,反應出來???請各位賜教下,謝謝~
查看完整描述

2 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

第一段代碼,觸發resize時間后,第二次add函數取消了定時器,造成了第一次add函數作用域中a值就不會變化了。
clearInterval(timer);//timer是全局變量,第二次add函數影響到了第一次add函數
                            
查看完整回答
反對 回復 2019-04-16
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

/*在window.addEventListener中添加unLoad=true即可,原因是當第一次調用add()時將unload設置為false*/
window.addEventListener("resize",function(){
unLoad=true;
add();
console.log("resize");
},false);
                            
查看完整回答
反對 回復 2019-04-16
  • 2 回答
  • 0 關注
  • 320 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號