繁体   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