考虑以下:
(function(){
var foo = bar = 1;
}());
Run Code Online (Sandbox Code Playgroud)
由于它们的作用域,两个变量在函数内部的值都为1,但是bar将保留在函数外部(在全局范围内).
我很好奇是否有办法使用赋值运算符初始化变量,没有循环或对象.我正在寻找一个关键字或前缀,这将使bar成为本地范围.这个想法是干燥和有效的.
编辑:上面的例子很简单.使用10个变量的一个选项可能是在初始化之前将变量预先声明到本地范围:
var foo, bar, baz, foobar, foobaz, bazfoo, barbaz,
bazbar = foo = bar = baz = foobar = foobaz = barbaz = true;
Run Code Online (Sandbox Code Playgroud)
但是,这样做既重复又难以阅读.一个人可以使用数组或对象,但这不太清晰,更混乱.
背景是另一个开发人员正在var foo = bar = true一个函数内部,我指出只是设置一个局部变量.他们没有意识到这一点,并且想要改变并询问是否可以内联和设置多个局部变量,而不是多次键入每个变量(而不是重构代码/数组或对象).
在最初问这个问题时,我接触过ES6,但尚未完全阅读文档.我的想法是ES6有一些很好的功能(例如,休息,解构赋值),所以它也可能提供了一种方法来将大块变量大量初始化为相同的范围和值.
您不能(或不应该)为未声明的变量赋值.
然后,当您想要使用相同的值声明多个变量时,您可以
为每个变量分配相同的值:
var var1 = value,
var2 = value,
/* ... */
varN = value;
Run Code Online (Sandbox Code Playgroud)
如果value是一个昂贵的表达式,您可以使用var1而不是重复value以避免每次重新计算它,例如
var foo = 1, bar = foo;
Run Code Online (Sandbox Code Playgroud)首先声明所有变量,然后将值分配给所有变量:
var var1, var2, /* ..., */ varN;
var1 = var2 = /* ... = */ varN = value;
Run Code Online (Sandbox Code Playgroud)
您可以在单个语句中执行此操作,并避免重复最后一个变量,例如
var foo, bar = foo = 1;
Run Code Online (Sandbox Code Playgroud)如果你真的想避免重复变量的值,你可以尝试解构赋值有[].fill:
var [var1, /*...*/ varN] = new Array(n).fill(value);
Run Code Online (Sandbox Code Playgroud)
但我不推荐它,因为它会创建一个无用的数组.
| 归档时间: |
|
| 查看次数: |
17215 次 |
| 最近记录: |