2

考虑:

var success = function(data){
    data = process_data(data);
    console.log(data);
};

对比

var success = function(data){
    var data = process_data(data);
    console.log(data);
};

每个的优点/缺点是什么?

4

5 回答 5

3

您的 ECMAscript 解释器没有区别。

形式参数局部变量都存储在所谓的激活对象(ES3)和词法环境记录(ES5+)中。

这些是实现级别的特殊数据容器,用于存储属于上下文的数据,如函数。

于 2013-07-26T11:16:30.660 回答
1

虽然在运行时不会有任何差异,但大多数 linting 工具都会抱怨第二段代码。JSHint 给出了这个错误:

“数据”已经定义。

如果您不需要原始data参数,则重新声明变量是安全的,但通常没有必要。

于 2013-07-26T11:18:52.817 回答
1

在输入函数代码时,形参列表中的标识符被有效地视为变量声明,因此将它们包含在函数体内的var语句中没有任何作用。

但是,有一个古老版本的 Safari 在以下情况下会引发错误:

function (foo) {
  foo = foo || {};
  ...
}

没有传递任何值。但是,那是很久以前的事了,当然不是为形式参数包含var语句的理由。

于 2013-07-26T11:21:51.060 回答
1

如果你有:

function foo(bar) {
    var bar = otherFunc(bar);
    ...
}

尽管这在技术上是正确的,但我认为它的形式很差,因为您暗示有两个不同的“条形”变量。与不使用“var”的版本相比,这似乎会导致更多的混乱。

于 2013-07-26T11:24:20.070 回答
0

如果你想在里面声明一个变量,那么你可能应该用其他名称声明它(与参数不相似)。

这样您就可以重用原来的argument.

如果你不想使用原版,argument那么你可以直接使用它。但请记住,在内部声明一个新变量会限制变量的范围。

于 2013-07-26T11:18:56.290 回答