Доступ к затененной переменной в самоисполняющейся функции

В следующем примере есть ли способ получить ссылку на переменную 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));
Другие вопросы по тегам