Можно ли переключить глобальное логическое значение из одной функции? - PullRequest
2 голосов
/ 16 декабря 2011

Пока я пытаюсь:

var myBoolean = false; // global

function toggleBoolean(vr) {
    vr = !vr;
}

alert(myBoolean); // false
toggleBoolean(myBoolean);
alert(myBoolean); // false

Но, очевидно, это не удалось.

Редактировать: извините, я забыл указать, что хочу, чтобы функция работала со многими логическими значениями, а не только с одним

Ответы [ 3 ]

5 голосов
/ 16 декабря 2011

Да, вы можете переключать глобальное логическое значение из функции. Вы не можете сделать это, как в вашей попытке, потому что JavaScript строго по значению.

function toggleBoolean() {
  myBoolean = ! myBoolean;
}

Теперь, если вы хотите переключить глобал с помощью name , вы можете сделать это (хотя это немного странно):

function toggleBoolean(name) {
  window[ name ] = ! window[ name ];
}

Глобальные переменные (в JavaScript в браузере) - это свойства глобального объекта, который называется «окном». В других контекстах есть способы связать имя с глобальным контекстом. Поэтому вы бы назвали эту функцию так:

toggleBoolean( "myBoolean" );

Обратите внимание, что я передаю строку вместо ссылки на фактическую глобальную переменную.

2 голосов
/ 16 декабря 2011

вы передаете значение функции по значению. Вместо этого, чтобы достичь того, что вы хотите, вы можете сделать что-то вроде:

var myBoolean=false;// Global

function toggleBoolean(){
    myBoolean = !myBoolean;
} 
1 голос
/ 16 декабря 2011

Вы можете сделать

var myState = { state : false };

function toggleBoolean( s )
{
    s.state = ! s.state;
}

alert( myState.state );
toggleBoolean( myState );
alert( myState.state );

примитивы передаются по умолчанию в JavaScript. Вы можете иметь объект-оболочку и передавать объект в функцию toggle .

...