[英]Javascript - difference between closure and normal function
我是Java語言的新手,我一直在看一段視頻,在該視頻中,我使用下面的閉包找到了對衰落函數的引用(已修改為包括更少的代碼)。
function fade(id) {
var dom = id, level = 1;
console.log(dom + ' : ' + level);
function step() {
var h = level.toString(16);
dom = dom + h;
if (level < 5) {
console.log('level '+ id + ' = '+level);
level +=1;
setTimeout(step,100);
}
}; setTimeout(step,100);
};
當我多次調用此函數時,請說fade(1); fade(2); fade(3); 在瀏覽器控制台中,我看到執行是並行的,即所有三個函數調用正在同時執行。 由於控制台中的日志語句,我認為它是並行的。
然后我將step聲明為淡入淡出功能范圍之外的函數,並從淡入淡出調用此函數:
function step(dom, level) {
var h = level.toString(16);
dom = dom + h;
if (level < 5) {
console.log('level '+ dom + ' = '+level);
level +=1;
setTimeout(step(dom,level),100);
}
};
function fade(id) {
var dom = id, level = 1;
console.log(dom + ' : ' + level);
setTimeout(step(dom,level),100);
};
當我這樣調用淡入淡出時:fade(1); fade(2); fade(3); 執行幾乎像是順序執行,即首先執行fade(1),然后依次執行其他操作。
出現這種現象的原因是什么,是否是由於閉包引起的,如果可以的話,請您解釋一下當我將閉包引入頂層函數時發生了什么變化嗎? 任何有關此的幫助,主題/概念的尋找將不勝感激。
您要告訴step
函數執行,而不是將其作為“非關閉”代碼中的引用傳遞。 嘗試更改step()
以step
setTimeout()
調用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.