考虑:
var success = function(data){
data = process_data(data);
console.log(data);
};
VS
var success = function(data){
var data = process_data(data);
console.log(data);
};
每个人的利弊是什么?
答案 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
,则可以直接使用它。但请记住,在里面声明一个新变量会限制变量的范围。