为什么我的变量需要一个' var'声明,当它已经在var声明中?

时间:2016-04-12 19:35:40

标签: javascript variables

如果一个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
  });

一切都会好起来的。这不是我第一次遇到这种现象,而我真的不知道原因。对于如何定义未由(;)?

分隔的变量,是否存在一些限制

2 个答案:

答案 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后添加逗号,则后续行是声明,如您所料。