Javascript 为什么这个模块只有在我没有';不要将任何参数传递给`$(窗口).resize()`回调?
我正在尝试模块化我的前端javascript。我使用的是duo.js,它允许您使用commonjs模块,并将其编译为在浏览器中使用(与webpack或browserify不同) 代码侦听调整大小事件并Javascript 为什么这个模块只有在我没有';不要将任何参数传递给`$(窗口).resize()`回调?,javascript,jquery,commonjs,duo.js,Javascript,Jquery,Commonjs,Duo.js,我正在尝试模块化我的前端javascript。我使用的是duo.js,它允许您使用commonjs模块,并将其编译为在浏览器中使用(与webpack或browserify不同) 代码侦听调整大小事件并.hide()s或.show()s导航。但它仅在我没有将任何参数传递给要传递给$(窗口)的匿名函数时才起作用。resize()作为回调 因此,在下面的模块中,$(窗口).resize(函数(){}起作用,$(窗口).resize(函数(切换,导航){}不起作用。这是为什么 模块代码: /** *
.hide()
s或.show()
s导航。但它仅在我没有将任何参数传递给要传递给$(窗口)的匿名函数时才起作用。resize()
作为回调
因此,在下面的模块中,$(窗口).resize(函数(){}
起作用,$(窗口).resize(函数(切换,导航){}
不起作用。这是为什么
模块代码:
/**
* External dependencies
*/
var $ = require('components/jquery');
/**
* Correct menu visibility on window resize
*/
module.exports = function(toggle, navigation) {
$(window).resize(function() { // this works
// Always show navigation when resizing to a larger screen size
if($(toggle).is(":hidden")) {
$(navigation).show();
};
// Always hide navigation when resizing to a smaller screen size
if($(toggle).is(":visible")) {
$(navigation).hide();
};
});
};
初始化:
/**
* Local dependencies
*/
var navVisibility = require('../../lib/components-nav');
/**
* Navigation visibility
*/
var toggle = '#Nav-toggle';
var navigation = '.Nav';
navVisibility(toggle, navigation);
创建并指定为处理程序的匿名函数将有权访问在创建它的上下文中定义的变量。
因此,您在上面的示例中所显示的是正确的,我认为它没有问题 编辑 我没有测试以下内容,但您可能想尝试一下
var t = toggle;
var n = navigation;
$(window).resize({ x : t , y : n }, function (e) {
var msg = $(e.data.x).val();
if($(e.data.x).is(":hidden")) {
$(e.data.y).show();
};
if($(e.data.x).is(":visible")) {
$(e.data.y).hide();
};
});
你能为你的问题制作一个功能性的jsfiddle.net吗?一个匿名的事件处理函数
function(){}
不接受参数。你可以像这里描述的@Havenard那样将参数传递给这个函数,不幸的是没有,因为duojs编译了这段代码(我不能通过jsfiddle这样做).Ok,所以当我传递参数时它不起作用,因为事件处理程序不接受参数。当我不传递参数时它起作用,因为匿名函数已经可以访问创建它的上下文中可用的变量。