如何在JavaScript中使函数参数不变?

sha*_*hal 34 javascript constants ecmascript-6

我想要做的是使用尽可能多的不可变变量,从而减少我的代码中的移动部件的数量.我想在必要时使用"var"和"let".

这不起作用:

function constParam(const a){
    alert('You want me to '+a+'!');
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Ber*_*rgi 40

函数参数将保留var在ES6中的可变绑定(例如),你无能为力.您可能获得的最佳解决方案是在初始化中对arguments对象进行解构const:

function hasConstantParameters(const a, const b, const c, …) { // not possible
    …
}
Run Code Online (Sandbox Code Playgroud)
function hasConstantParameters() {
    const [a, b, c, …] = arguments;
    …
}
Run Code Online (Sandbox Code Playgroud)

请注意,此函数将具有不同的arity(.length),如果需要,您必须声明一些占位符参数.

  • 这实际上是一个有趣的解决方案.如果不是那么难看,我会开始使用它. (18认同)
  • `function hasConstantParameters(...args) { const [a, b] = args; 怎么样?};`? (3认同)
  • @BugsBunny 这几乎是一样的。但是,我不喜欢引入另一个标识符(`args`),我故意在通常的地方不放任何参数,而是将所有内容都移到了 `const` 声明中。 (3认同)

Bar*_*mar 14

你不能做一个参数const.将它用作局部变量的初始值:

function constParam(a) {
    const const_a = a;
    ...
}
Run Code Online (Sandbox Code Playgroud)

另请注意,const自IE11起,Internet Explorer中仅支持此功能.请参阅此兼容性表