考虑:
var success = function(data){
data = process_data(data);
console.log(data);
};
对比
var success = function(data){
var data = process_data(data);
console.log(data);
};
每个的优点/缺点是什么?
考虑:
var success = function(data){
data = process_data(data);
console.log(data);
};
对比
var success = function(data){
var data = process_data(data);
console.log(data);
};
每个的优点/缺点是什么?
您的 ECMAscript 解释器没有区别。
形式参数和局部变量都存储在所谓的激活对象(ES3)和词法环境记录(ES5+)中。
这些是实现级别的特殊数据容器,用于存储属于上下文的数据,如函数。
虽然在运行时不会有任何差异,但大多数 linting 工具都会抱怨第二段代码。JSHint 给出了这个错误:
“数据”已经定义。
如果您不需要原始data
参数,则重新声明变量是安全的,但通常没有必要。
在输入函数代码时,形参列表中的标识符被有效地视为变量声明,因此将它们包含在函数体内的var语句中没有任何作用。
但是,有一个古老版本的 Safari 在以下情况下会引发错误:
function (foo) {
foo = foo || {};
...
}
没有传递任何值。但是,那是很久以前的事了,当然不是为形式参数包含var语句的理由。
如果你有:
function foo(bar) {
var bar = otherFunc(bar);
...
}
尽管这在技术上是正确的,但我认为它的形式很差,因为您暗示有两个不同的“条形”变量。与不使用“var”的版本相比,这似乎会导致更多的混乱。
如果你想在里面声明一个变量,那么你可能应该用其他名称声明它(与参数不相似)。
这样您就可以重用原来的argument
.
如果你不想使用原版,argument
那么你可以直接使用它。但请记住,在内部声明一个新变量会限制变量的范围。