簡體   English   中英

在setTimeout中調用Javascript函數-哪個更好?

[英]Javascript function calling within setTimeout - which is better?

我有兩個版本的代碼。 有人可以讓我知道哪個是最佳且更快的嗎?

版本1:

function showMsg(a)
{
    alert(a);
}
function invokeShowMsg()
{
    var msg = 'hi';
    showMsg(msg);
}
window.setTimeout(invokeShowMsg,1000);

版本2:

function showMsg(a)
{
    alert(a);
}
window.setTimeout(function(){showMsg('hi');},1000);

另一個疑問是,版本2的調用方式稱為“關閉”嗎?

就速度而言,您不會注意到兩者之間的任何區別,因此請選擇您喜歡的東西。

我更喜歡#2 ,因為它更干凈並且使語法可讀:

setTimeout(function() {
  showMsg('hi');
}, 1000);

是的,版本2稱為Closure。 就速度而言,它們都是等效的。

正如@Blender所說,我也更喜歡2 ,因為它不會使用(半沒用的)“調用程序”函數污染全局空間。 它很干凈,對於知道setTimeout工作原理的人來說很容易理解。 就速度而言,幾乎沒有區別。 這是兩種方法的性能比較

但是,據我了解,這不是關閉。 它只是一個匿名函數。 在JavaScript中,就像在許多其他動態語言中一樣,函數是一等公民 ,這意味着它們可以創建和傳遞-它們是對象。 但是,閉包不僅僅是匿名函數。 這個問題的答案解釋了閉包是多么簡潔。

暫無
暫無

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

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