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