如果一个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错误,好像它正在寻找变量,而不是定义一个空变量。如果我只是改变这个:
$("#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
});
一切都会好起来的。这不是我第一次遇到这种现象,而我真的不知道原因。对于如何定义未由(;)?
分隔的变量,是否存在一些限制答案 0 :(得分:3)
在您的一个声明inputGroup = input.parents('div.input-group')
之后,您错过了一个逗号。由于您的所有其他声明也是一个表达式(它们之后有一个=符号),因此它们自己是有效的语句(将结果分配给全局变量)。 typingTimer
虽然没有这样的作业,但却导致了未定义的错误。
添加缺少的逗号将解决问题。
答案 1 :(得分:1)
您的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
后添加逗号,则后续行是声明,如您所料。