[英]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.