Доступ к затененной переменной в самоисполняющейся функции
В следующем примере есть ли способ получить ссылку на переменную someValue, объявленную вне someFunction изнутри someFunction, или он полностью скрыт параметром функции с тем же именем. Я ценю, что могу прикрепить его к окну и получить доступ к нему из функции, используя это, но есть ли способ получить к нему доступ в этой ситуации?
[Изменить] Чтобы уточнить. Я понимаю, что параметр скрывает переменную. Очевидно, что изменение имени параметра устранит эту проблему. Мой вопрос заключается в том, существует ли какой-либо способ доступа к переменной в данной ситуации.
(function($){
var someValue = 41;
function someFunction(someValue) {
console.log(someValue); //= 22
}
someFunction(22);
}(jQuery));
3 ответа
Вы, кажется, намеренно следите за переменной, а затем пытаетесь получить ее значение. Просто дайте ему другое имя или переименуйте ваш параметр.
var someValue = 41;
function someFunction(myParameter) {
console.log(someValue); // someValue == 41
}
someFunction(22); // logs 41
Там нет никакого способа, чтобы войти someValue
это было объявлено вне функции, если вы не собираетесь передавать переменную:
(function($){
var someValue = 41;
function someFunction(someValue, otherValue) {
console.log(someValue, otherValue); //= 22 41
}
someFunction(22, someValue);
}(jQuery));
Или переименуйте параметр:
(function($){
var someValue = 41;
function someFunction(otherValue) {
console.log(someValue); //= 41
}
someFunction(someValue);
}(jQuery));
Это потому что someValue
имя, которое вы используете в качестве параметра, затмевает имя, объявленное вне функции.
Поскольку вы используете локальную переменную (var), контекст someValue установлен на функцию. Лучшее решение состоит в том, чтобы использовать другое имя, предложенное другими, если вы отчаянно хотите использовать то же имя, хотя вы можете прикрепить его к объекту окна, удалив ключевое слово var, например, так:
(function($) {
someValue = 41;
function someFunction(someValue) {
console.log(window.someValue); //= 41
console.log(someValue); //= 22
}
someFunction(22);
}(jQuery));