簡體   English   中英

在函數內部調用函數時的不同結果

[英]Different Result when function is called inside a function

我有以下JS代碼,用於檢查網頁,以查看是否有規律地在其上發布新的密鑰。 現在的問題是:

  • 當直接從Dev Console(F12)調用start() ,結果正確,而我的函數$(document).ready調用時結果錯誤,是的,我有100次確認頁面上的內容均未更改。

  • 我只是很好奇,看看var是否不同步,所以我在$(document).ready兩次調用了start() ,結果仍然是錯誤的,但是當我從F12調用satrt()時(調用它20后)從$(document).ready ,我得到了正確的結果。

  • 我已經確認所有事件都在等待對方finsih(也許叫synchronous )和它的不正確的,任何單一的語句在不同的線程運行。

然后,如果F12調用它,然后調用它的Correct,如果$(document).ready調用它,那么它怎么可能出錯。

需要注意的有趣一點:

當我的代碼中沒有$(document).ready ,我從start()調用了wow() ,這也給了我錯誤的結果,但是F12給出了Correct。 現在我有了$(document).ready ,如果我從中調用start() ,這又反過來調用wow()會給我錯誤的結果,但是現在如果我從控制台中調用start() ,它會給我正確的結果!

我想以簡單的形式執行的操作:

  1. 等待頁面完成加載
  2. 致電wow()
  3. 等待wow()完成
  4. 重新載入頁面

同一過程無限循環地繼續。

感謝您的幫助,這已經浪費了我大約5-6個小時的時間!

JS代碼: http//pastebin.com/9UJYdepU

編輯:

正確的輸出:

a.js:136 Started
a.js:33 Called Wow
a.js:83 ---------------------KEY 7.0----------------
a.js:83 ---------------------KEY 7.1----------------
a.js:83 ---------------------KEY 7.2----------------
a.js:102 LAST used keys : Saab,Volvo,BMW,4E69G-8GNG4-JCZ4Z,H63HQ-VHWPX-ZCJ8J,FKZGK-MXL5C-P2YTE,4E69G-xxxxxx-JCZ4Z,4E69G-AAAxx-JCZ4Z,4E69G-AAAxx-JasasCZ4Z,4E69G-AAAxx-JasaaaasCZ4Z
a.js:140 WOWO DONW

錯誤的輸出:

Started
a.js:33 Called Wow
a.js:102 LAST used keys : Saab,Volvo,BMW,4E69G-8GNG4-JCZ4Z,H63HQ-VHWPX-ZCJ8J,FKZGK-MXL5C-P2YTE,4E69G-xxxxxx-JCZ4Z,4E69G-AAAxx-JCZ4Z,4E69G-AAAxx-JasasCZ4Z,4E69G-AAAxx-JasaaaasCZ4Z
a.js:140 WOWO DONW

document.getElementsByTagName("p"); 提供: http : localStorage.getItem("usedp")提供Saab,Volvo,BMW,4E69G-8GNG4-JCZ4Z,H63HQ-VHWPX-ZCJ8J,FKZGK-MXL5C-P2YTE,4E69G-xxxxxx-JCZ4Z,4E69G-AAAxx-JCZ4Z,4E69G-AAAxx-JasasCZ4Z,4E69G-AAAxx-JasaaaasCZ4Z

終於我解決了! 這全都是邪惡的Jquery的原因(對不起,如果我傷害了您)。

$(document).ready是在頁面開始加載而不是完成加載時觸發的,我的替代解決方案是:

var myVar = setInterval(function(){ chk() }, 500);
function chk(){

if(document.readyState=="complete"){
        clearInterval(myVar);

    startt();


}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM