Допустим, это a, а его область действия глобальная.
Вы имеете в виду «a является глобальной переменной».
... для определенногофункция, я хочу установить значение этой переменной в нечто иное, чем ее глобальное значение, но на основе этого, и без изменения ее значения в глобальном масштабе.
Невозможно.Вы можете создать переменную с тем же именем, что и в цепочке областей действия, однако вы не можете условно создать свойства переменных объектов (т. Е. Объектов, используемых для разрешения идентификаторов в цепи областей действия).Вы можете объявить только локальные переменные, что означает, что они существуют до запуска любого кода и поэтому не могут быть условными, или вы можете напрямую назначить необъявленный идентификатор, после чего он становится глобальной переменной.
[snippedкод]
Проблема с приведенным выше кодом заключается в том, что когда я определяю переменную a a в функции, она уже очистит значение глобального локально перед его установкой;
Код никоим образом не «очищает» значение a
.Он создает локальную переменную a, чтобы идентификатор a преобразовывался в эту переменную, а не в глобальную a .Чтобы разграничить их, вы можете получить доступ к глобальному a
как свойству глобального объекта:
var a = 'whatever';
var myFunction = (function(global) {
return function() {
var a; // local a
global.a; // global a
}
}(this));
Опять же, a все равно должно быть (поэтому использование другого имени переменной не являетсявариант или хотя бы не идеальный).Фактически, глобальный a не должен быть доступен из функции hello.
Невозможно, хотя это может быть почти возможно в строгом режиме ES5, если код пытается получить доступ к глобальному a * 1033.* находится внутри другой функции и не может получить ссылку на глобальный объект.
Но я не думаю, что вы можете гарантировать это.