私がやりたいのは、できるだけ多くの不変変数を使用して、コード内の可動部分の数を減らすことです。 「var」と「let」は必要なときにだけ使いたいです。
これは機能しません:
function constParam(const a){
alert('You want me to '+a+'!');
}
何か案は?
ES6では、関数パラメーターは可変バインディング(var
など)のままになりますが、それに対してできることは何もありません。おそらくあなたが得る最良の解決策は、arguments
初期化で const
オブジェクト を非構造化することです:
function hasConstantParameters(const a, const b, const c, …) { // not possible
…
}
function hasConstantParameters() {
const [a, b, c, …] = arguments;
…
}
この関数は異なるアリティ(.length
)、必要な場合は、プレースホルダーパラメーターを宣言する必要があります。
パラメーターconst
を作成することはできません。ローカル変数の初期値として使用します:
function constParam(a) {
const const_a = a;
...
}
const
はIE11の時点でInternet Explorerでのみサポートされていることにも注意してください。こちらをご覧ください 互換性テーブル
JavaScriptでパラメーターを強制的に不変にする方法はありません。あなた自身でそれを追跡する必要があります。
変数を変更しないスタイルで書くだけです。言語がforceに機能を提供しないという事実は、とにかくまだそれができないという意味ではありません。
これが私がすることです:
の代わりに:
function F(const a, const b, const c, const d, const e, const f, const g){ // Invalid Code
// lorem
// ipsum
}
..使用する:
function F(){const[a, b, c, d, e, f, g] = arguments;
// lorem
// ipsum
}
ES6の構造化を使用して、paramsから定数を作成できます
function test(...args) {
const [a, b, c] = args;
}
不変の構造については、あなたが探していると思います Immutable.js 。
@Andreas_Gnypが言っているように、ES6までJavaScriptにはlet
/const
はありません。 (または、ES6が完全にサポートされるとfunction(const a) {...}
はありません。)const
を使用する場合は、独自のconst
機能を実装するか、使用を開始できます。 Babel など、サードパーティのES6-to-ES5コンパイラを使用したES6表記。
ただし、ES6表記のconst
しないを使用すると、変数は不変になります。例えば。 const a = [1, 2]; a.Push(3);
は完全に有効なプログラムであり、a
は_[1, 2, 3]
_になります。 const
はonlya
の再割り当てを禁止するため、_a = []
_または_a = {}
_を一度も実行できません_const a = [1, 2];
_は既に定義されています(その特定のスコープ内)。
_function hasConstantParameters(...args) {
const [a, b] = args;
}
_
Immutable.js は、var a = fromJS([1, 2]);
を定義し、a
を関数パラメーターとして渡すときに、受信関数a.Push(3)
でa
には影響しません。これはあなたが達成したかったものですか?
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