【发布时间】:2020-10-27 23:59:07
【问题描述】:
注意:这是关于声明 LOCAL 变量(函数范围的变量)。
我刚刚意识到,当我有一个我可以控制其调用者的 JavaScript 函数(例如不是公共 API)时,我可以“安全地”简化 local的声明和分配> 变量并同时摆脱var/const/let。
该方法利用默认函数参数来 a) 声明一个函数范围的变量 b) 甚至分配它:
// BEFORE
function createDashes(count) {
let dash ="-"; // declare a variable for use in the function
for (let i=0; i < count; i++) {
dash += "-";
}
return dash;
}
console.log(createDashes(5)); // "-----"
// AFTER
function createDashes(count, dash="-") {
for (let i=0; i < count; i++) {
dash += "-";
}
return dash;
}
console.log(createDashes(5)); // "-----"
总的来说,通过这种技术,我们可以声明任意(但固定)数量的变量,无论是否赋值:
// var0 - var2 are variables without assignments (i.e. initialized to undefined)
// var3 - var4 are variables with assignments (must come after the previous ones!)
function foo(actualParameter, var0, var1, var2, var3="x", var4="y") {
// ...
}
使用这种技术也不会降低性能。
问题:这种方法有什么限制或限制?
函数参数是一个可访问的类数组对象 内部函数包含传递给该函数的参数值。
arguments 对象 是一个局部变量,可在所有 非箭头函数。您可以在里面引用函数的参数 该函数通过使用其参数对象。它有每个条目 调用函数的参数,第一个条目的索引为 0.
【问题讨论】:
-
你怎么知道没有性能损失?你咨询过 JS VM 的实现吗?我还认为,也许除了破折号函数之外的示例会更好。从那里开始,您甚至不需要一个变量来保存
"-"。此外,您可以将其整体简化为const creatDashes = "-".repeat,从而破坏您的示例目的:) -
我同意@ComFreek。这个例子只是一个坏例子。
-
@ComFreek。您的编辑非常有用。谢谢你。
标签: javascript arrays variables global-variables hoisting