Подтвердить что ты не робот

Как сделать константу параметра в JavaScript?

Что я хочу сделать, так это использовать как можно больше неизменяемых переменных, тем самым уменьшая количество движущихся частей в моем коде. Я хочу использовать "var" и "let" только тогда, когда это необходимо.

Это не сработает:

function constParam(const a){
    alert('You want me to '+a+'!');
}

Любые идеи?

4b9b3361

Ответ 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 не может быть легко изменен из "снаружи".