簡體   English   中英

變量可以在單個函數調用期間更改值(從外部嗎?)

[英]Can a variable change value during single function call (from the outside?)

我一直想讀完整的ECMA5-6規范, 咳嗽 ,但也許你們都可以幫我!

在JavaScript中執行單個調用的過程中,變量可以從“外部”更改嗎?

偽javascript示例:

window.foo = true;

startSomeLoopMutatingFoo();

function f() { 
   var a = window.foo;

   // Insert long, blocking work here, none of which mutates window.foo

   var b = window.foo; // again

   if (a != b) { totalMindExplosion() }
}

我會被打擊嗎? 在任何可能的情況下都可以調用totalMindExplosion()嗎?

這是一個JS提琴,以促進精神分裂: http : //jsfiddle.net/Mf3rc/

我正在尋找資源以了解何時執行異步方法,直接答案或清晰性問題。

非常感謝!

不,不會調用totalMindExplosion()。

當執行時,閉包(函數)中的代碼將阻止該進程,因此沒有機會執行其他代碼。

例:

function(){
    var a = 1;
    window.setTimeOut(function(){console.log(a);}, 0);
    a = 2;
}()

這將記錄2而不是1,即使超時為0秒。 僅在執行完整功能后才調用console.log函數,屆時變量'a'設置為2。

從上面的及時評論中的鏈接, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/EventLoop

“運行到完成”

在處理任何其他消息之前,將完全處理每個消息。 在推理程序時,這提供了一些不錯的屬性,包括以下事實:無論何時運行一個函數,都不能搶占它,並且會在其他任何代碼運行之前完全運行(並且可以修改該函數操作的數據)。 例如,這與C不同,在C中,如果函數在線程中運行,則可以在任何時候停止該函數以在另一個線程中運行某些其他代碼。

因此,這意味着我將永遠不會被打擊!

暫無
暫無

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

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