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