关于范围的问题 - jQuery

时间:2011-08-18 23:40:37

标签: jquery scope global-variables

我有这个功能,它具有这段代码(为简洁而编辑):

(function ($) {

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

})(jQuery);

我想要做的是在其他函数中从此函数访问$ menuItems。

例如:

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

我认为这是一个范围问题?

我不确定该怎么做?

3 个答案:

答案 0 :(得分:0)

在代码之前

添加

var $menuItems

它应该有效。顺便说一下,你的代码中有解析错误,你就错过了

});

(所以它看起来像)

(function ($) {

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

答案 1 :(得分:0)

你必须在全局命名空间中声明$ menuItems,就像一个例子:

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

你的IDE可能会抱怨$ menuItems没有被定义,但是它会被javascript定义。

就范围而言,如果你有一个函数或匿名方法,并且在里面有一行

var myVar = somethingElse;

然后范围定义myVar只对该函数或方法中的任何其他内容都是已知的。

如果您将声明放在函数体外,那么它将可用于任何可用的函数/方法。 至于最佳实践,这可能并不总是一件好事,它类似于使用全局变量并听取你的comp.sci教授,但是如果你知道代码的范围并且对你的命名约定是明智的,那么你的名字就会赢得'与其他任何事情发生冲突,你通常都可以。

答案 2 :(得分:0)

第三种选择:

(function ($) {

    var $menuItems = /* whatever */;

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

    // "export" the variable
    window.$menuItems = $menuItems;
})(jQuery);