簡體   English   中英

當變量已經在var聲明中時,為什么我的變量需要'var'聲明?

[英]Why does my variable need a 'var' declaration, when it's already inside a var declaration?

如果mod可以幫助我更好地表達我的問題,我將不勝感激,因為如果不提供示例就很難提出這個問題。 這是我創建的函數:

$("#myField").on('keyup', function(event){
    var input = $(this), 
         val  = input.val(),
         inputGroup = input.parents('div.input-group')
         searchingIcon = $(inputGroup).find('i.auto-spinner'),
         button = $(inputGroup).find('span.input-group-btn > button.btn'),
         key = event.which,
         typingTimer; // This throws an error typingTimer is not defined

    //Clear typing timeout on keypress
    clearTimeout(typingTimer);
    //.... more code below.. not important
  });

如您所見,我喜歡在一個簡單的var聲明中聲明我的var,后跟逗號,但是,在這種情況下,當我輸入打字計時器時,會收到未定義的var錯誤,就像它在尋找變量一樣,而不是定義一個空變量。 如果我只是將其更改為:

$("#myField").on('keyup', function(event){
    var input = $(this), 
         val  = input.val(),
         inputGroup = input.parents('div.input-group')
         searchingIcon = $(inputGroup).find('i.auto-spinner'),
         button = $(inputGroup).find('span.input-group-btn > button.btn'),
         key = event.which;
   var typingTimer; // All is well again...

    //Clear typing timeout on keypress
    clearTimeout(typingTimer);
    //.... more code below.. not important
  });

一切都會正常。 這不是我第一次遇到這種現象,我真的不知道造成這種現象的原因。 我如何定義不以(;)分隔的變量是否有一些限制?

在聲明之一inputGroup = input.parents('div.input-group')之后,您缺少逗號。 由於所有其他聲明也是一個表達式(它們后面都有一個=符號),因此它們本身就是有效的語句(將結果分配給全局變量)。 typingTimer沒有這種分配,因此會引起未定義的錯誤。

添加缺少的逗號將解決此問題。

您在inputGroup聲明后缺少逗號,導致該行后出現自動分號。 因此,所有后續分配都不是聲明。 他們只是任務。

通過顯式編寫隱式分號,我們可以用您的代碼更清楚地說明問題:

// declarations
var input = $(this), 
     val  = input.val(),
     inputGroup = input.parents('div.input-group');

// merely assignments
     searchingIcon = $(inputGroup).find('i.auto-spinner'),
     button = $(inputGroup).find('span.input-group-btn > button.btn'),
     key = event.which,
     typingTimer;

typingTimer不存在,因此在分配的左側以外以任何方式使用它都是無效的。 上面的其他賦值語句是可以接受的,因為它們會創建隱式全局變量(因為您未處於嚴格模式下)。

如果在分配inputGroup之后添加逗號,則后面的行如您inputGroup是聲明。

暫無
暫無

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

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