是否应该在函数内重新声明参数作为变量?

时间:2013-07-26 11:13:08

标签: javascript

考虑:

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

VS

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

每个人的利弊是什么?

5 个答案:

答案 0 :(得分:3)

您的ECMAscript口译员没有区别。

正式参数以及局部变量分别存储在这样的激活对象(ES3)词汇环境记录中(ES5 +)。

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

答案 1 :(得分:1)

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

  

'数据'已经定义。

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

答案 2 :(得分:1)

在输入function code时,形式参数列表中的标识符被有效地视为变量声明,因此将它们包含在函数体内的 var 语句中无效。

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

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

没有传递任何值。然而,这是很久以前的事情,当然不是为正式参数包含 var 语句的理由。

答案 3 :(得分:1)

如果你有:

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

虽然这在技术上是正确的,但我认为它很糟糕,因为你暗示有两个不同的“条形”变量。这似乎可能会导致更多的混乱,而不是你不使用“var”的版本。

答案 4 :(得分:0)

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

这样您就可以重复使用原始argument

如果您不想使用原始argument,则可以直接使用它。但请记住,在里面声明一个新变量会限制变量的范围。