How to make function parameter constant in JavaScript?
我要做的是使用尽可能多的不可变变量,从而减少代码中移动部件的数量。我只想在必要时使用"var"和"let"。
这行不通:
1 2 3 | function constParam(const a){ alert('You want me to '+a+'!'); } |
有什么想法吗?
函数参数将保持ES6中的可变绑定(如
1 2 3 | function hasConstantParameters(<s>const a, const b, const c, …</s>) { // not possible … } |
。
1 2 3 4 | function hasConstantParameters() { const [a, b, c, …] = arguments; … } |
请注意,如果需要,此函数将具有不同的arity(
不能设置参数
1 2 3 4 | function constParam(a) { const const_a = a; ... } |
号
还请注意,只有从IE11起,Internet Explorer才支持
我们可以使用ES6析构函数从参数创建常量
1 2 3 | function test(...args) { const [a, b, c] = args; } |
。
我就是这样做的:
而不是:
1 2 3 4 | function F(const a, const b, const c, const d, const e, const f, const g){ // Invalid Code // lorem // ipsum } |
。
使用:
1 2 3 4 | function F(){const[a, b, c, d, e, f, g] = arguments; // lorem // ipsum } |
。
在JavaScript中,无法强制参数不可变。你必须自己跟踪。
只需以一种您碰巧不会改变变量的样式编写。事实上,语言并没有提供任何工具来强迫你这样做并不意味着你仍然不能这样做。
对于不可变结构,我相信您正在寻找不可变的.js。
正如@andreas_gnyp所说,在ES6之前,javascript中没有
但是,记住ES6符号中的
1 2 3 | function hasConstantParameters(...args) { const [a, b] = args; } |
immutable.js将确保在定义
1 2 3 4 5 6 7 8 9 10 | function wrapper(i){ const C=i return new Function("a","b","return a+b+"+C) } f100 = wrapper(100) //? anonymous(a,b/*``*/) {return a+b+100} f100(1,2) //OUTPUT 103 f200 = wrapper(200) //? anonymous(a,b/*``*/) {return a+b+200} f200(1,2) //OUTPUT 203 |
首先,JS中没有常量(直到ECMAScript 6提案)。你必须用
例如,这样做:
1 2 3 4 5 | var kindaConstant = function(){ var donttouchthis ... do something with it return whateveryouvedonewithit } |
在这种情况下,