我有这个功能,它具有这段代码(为简洁而编辑):
(function ($) {
// mouseenter event for each menu item
$menuItems.bind('mouseenter', function (e) {});
})(jQuery);
我想要做的是在其他函数中从此函数访问$ menuItems。
例如:
$("#products a").click(function(){
$menuItems.unbind("mouseenter");
});
我认为这是一个范围问题?
我不确定该怎么做?
答案 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);