Как сделать константу параметра в JavaScript?
Что я хочу сделать, так это использовать как можно больше неизменяемых переменных, тем самым уменьшая количество движущихся частей в моем коде. Я хочу использовать "var" и "let" только тогда, когда это необходимо.
Это не сработает:
function constParam(const a){
alert('You want me to '+a+'!');
}
Любые идеи?
Ответы
Ответ 1
В ES6 параметры функции останутся изменяемыми привязками (например, var
), и вы ничего не можете с этим поделать. Вероятно, лучшим решением для вас является разрушение объекта arguments
в инициализации const
:
function hasConstantParameters(const a, const b, const c, …) { // not possible
…
}
function hasConstantParameters() {
const [a, b, c, …] = arguments;
…
}
Обратите внимание, что эта функция будет иметь другую значимость (.length
), если вам нужно будет объявить некоторые параметры заполнителя.
Ответ 2
Вы не можете сделать параметр const
. Используйте его как начальное значение локальной переменной:
function constParam(a) {
const const_a = a;
...
}
Обратите внимание, что const
поддерживается только в Internet Explorer с IE11. См. Таблицу совместимости
Ответ 3
Это то, что я делаю:
Вместо:
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
}
Ответ 4
Невозможно заставить параметр быть неизменным в JavaScript. Вы должны сами следить за этим.
Просто напишите в стиле, в котором вам не нужно мутировать переменные. Тот факт, что язык не предоставляет никаких возможностей для принуждения к этому, не означает, что вы все равно не можете это сделать.
Ответ 5
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
Ответ 6
Мы можем использовать ES6 для создания констант из параметров
function test(...args) {
const [a, b, c] = args;
}
Ответ 7
Для неизменяемых структур, я считаю, что вы ищете Immutable.js.
Как говорит @Andreas_Gnyp, до ES6 в JavaScript нет let
/const
. (И не будет function(const a) {...}
после того, как ES6 будет отключен и полностью поддерживается.) Если вы хотите использовать const
, вы можете либо реализовать свою собственную функцию const
, либо начать использовать нотацию ES6 с помощью сторонних ES6- to-ES5, например Babel.
Однако помните, что const
в нотации ES6 не делает переменную неизменной. Например. const a = [1, 2]; a.push(3);
- вполне допустимая программа, а a
станет [1, 2, 3]
. const
будет препятствовать переназначению a
, поэтому вы не можете выполнить 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
. Это то, чего вы хотели достичь?
Ответ 8
Прежде всего, в JS нет констант (до предложения ECMAScript 6). Вам нужно будет использовать var
, чтобы построить что-то подобное. Если вы хотите иметь "private" области вашего JS-кода, вы используете одну из функций языка, которые являются областями.
Итак, например, выполните следующие действия:
var kindaConstant = function(){
var donttouchthis
... do something with it
return whateveryouvedonewithit
}
В этом случае donttouchthis
не может быть легко изменен из "снаружи".