Вопрос о сфере применения - jQuery - PullRequest
0 голосов
/ 19 августа 2011

У меня есть эта функция, которая показывает этот бит кода (отредактировано для краткости):

(function ($) {

    // mouseenter event for each menu item
    $menuItems.bind('mouseenter', function (e) {});

})(jQuery);

Я хотел бы получить доступ к $ menuItems из этой функции в других функциях.

Например:

$("#products a").click(function(){
    $menuItems.unbind("mouseenter");
});

Я полагаю, что это вопрос масштаба?

Я не уверен, как это сделать?

Ответы [ 3 ]

0 голосов
/ 19 августа 2011

Вы должны будете объявить $ menuItems в глобальном пространстве имен, буквально как в примере:

<script type="text/javascript">
    var $menuItems = something;
</script>

Ваша IDE может жаловаться, что $ menuItems не определена, но для JavaScript это будет

Что касается области действия, если у вас есть функция или анонимный метод, и у вас есть такая строка внутри it:

var myVar = somethingElse;

затем область действия определяет, что myVar известен только кому-либо еще внутри этой функции или метода.

Если вы поместите свое объявление вне тела функции, то оно будет доступно для любой доступной функции / метода,Что касается лучших практик, то это не всегда хорошо, это похоже на использование глобалов и прослушивание вашего профессора comp.sci, но если вы знаете сферу своего кода и хорошо разбираетесь в соглашении об именах, чтобы ваше имя победило »не конфликтуй ни с чем другим, с тобой все в порядке.

0 голосов
/ 19 августа 2011

Третий вариант:

(function ($) {

    var $menuItems = /* whatever */;

    $menuItems.bind('mouseenter', function (e) {});

    // "export" the variable
    window.$menuItems = $menuItems;
})(jQuery);
0 голосов
/ 19 августа 2011

перед вашим кодом, добавьте

var $menuItems

, и оно должно работать.Кстати, у вас есть ошибка синтаксического анализа в вашем коде, вам не хватает

});

(так это будет выглядеть)

(function ($) {

    // mouseenter event for each menu item
    $menuItems.bind('mouseenter', function (e) {
         //something
    });
})(jQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...