为什么我经常看到这个Javascript构造/约定?(即在它自己的行上创建'var foo;',而不是通过赋值)

Mas*_*oud 2 javascript

我经常看到Javascript程序员做这样的事情:

function(index, input) {
  var $input;
  $input = $(input);
  return $input.data('foo', 'bar');
}
Run Code Online (Sandbox Code Playgroud)

虽然我想要做的是这样的事情:

function(index, input) {
  var $input = $(input);
  return $input.data('foo', 'bar');
}
Run Code Online (Sandbox Code Playgroud)

或者在这个特殊情况下,实际上这个:

function(index, input) {
  return $(input).data('foo', 'bar');
}
Run Code Online (Sandbox Code Playgroud)

在一行上声明'var',然后再分配给它们有什么价值?在我看来,添加额外的行只会导致可能的问题(例如,有人可能忘记添加'var'并意外地产生全局变量).那么为什么这样呢?

这只是某种编码约定(可读性,可能吗?),还是有一些关于JavaScript如何在内部工作的一些繁琐的事情,这使得这个结构在某种程度上更有效?

Chr*_*ian 8

在这个简单的例子中,它没有我能说的那么多.但是在javascript中,首先评估函数体中的var声明.所以在函数顶部添加所有var声明很有意义,如果它们仅在以后使用它们也是如此.

a = "GLOBAL";

function x(){
    console.log(a);
    var a = "VAR";
    console.log(a);
}

x()
Run Code Online (Sandbox Code Playgroud)

将打印

undefined
VAR
Run Code Online (Sandbox Code Playgroud)

并不是

GLOBAL
VAR
Run Code Online (Sandbox Code Playgroud)