为什么单独定义的函数不适用于;“多姆雷迪”;JavaScript中的事件?

为什么单独定义的函数不适用于;“多姆雷迪”;JavaScript中的事件?,javascript,domready,Javascript,Domready,我对JavaScript还很陌生。我试图给一些元素设置相同的高度。除了将函数移到“addEvent”声明之外,我设法做了所有的事情 换言之,此代码适用于: window.addEvent('domready', function() { var elements = $$( 'div#leftcolumn div.module_menu' ); if( elements && elements.length > 1 ) { var

我对JavaScript还很陌生。我试图给一些元素设置相同的高度。除了将函数移到“addEvent”声明之外,我设法做了所有的事情

换言之,此代码适用于:

window.addEvent('domready', function() {  
    var elements = $$( 'div#leftcolumn div.module_menu' );  
    if( elements && elements.length > 1 ) {  
        var heights = [];  
        elements.each( function( el ) {  
            heights.push( el.getStyle('height').toInt() );  
        });
        maxHeight = Math.max.apply( Math, heights ) + "px";
        elements.each( function( el ) {
            el.setStyle('height', maxHeight );
        });
        delete(heights);  
    }
}
);
虽然此代码不起作用:

function matchHeight( selector ) { 
var elements = $$( selector );  
if( elements && elements.length > 1 ) {  
    var heights = [];  
    elements.each( function( el ) {  
        heights.push( el.getStyle('height').toInt() );  
    });
    maxHeight = Math.max.apply( Math, heights ) + "px";
    elements.each( function( el ) {
        el.setStyle('height', maxHeight );
    });
    delete(heights);  
  }
}
window.addEvent( 'domready', matchHeight( 'div#leftcolumn div.module_menu' ) );
我已经用更简单的函数进行了测试,它可以工作,例如:

window.addEvent('domready', function() { alert('test'); } )
相当于

function giveMessage() { alert('test'); }
window.addEvent( 'domready', giveMessage())

这是为什么?

你忘记把你的
匹配高度
通话结束了。将最后一行更改为:

window.addEvent( 'domready', function(){matchHeight( 'div#leftcolumn div.module_menu' )} );

因为你需要去掉括号;函数是一个对象,您需要传递函数,而不是它的返回值。因此,对于第一个示例,您应该:

window.addEvent('domready', function() { matchHeight('div#leftcolumn div.module_menu'); } );
相反。第二个例子是:

function giveMessage() { alert('test'); }
window.addEvent( 'domready', giveMessage)

同样,您传递的是对象
giveMessage
,而不是调用该对象后获得的结果。

K因此该链接正在查找指向该函数的指针。当你传递一个匿名函数(如#1)时,该函数被创建/存储在内存中,并且该位置被传入。但是,在第二种情况下,JS执行函数(因为您的括号+参数),然后将结果作为指针传递。。。这不是你想要的

您需要做的是:

function setup() {
  matchHeight( 'div#leftcolumn div.module_menu');
}
window.addEvent('domready',setup);
或者仍然使用匿名函数:

window.addEvent('domready',
  function() {matchHeight( 'div#leftcolumn div.module_menu');});
FWIW
窗口。addEvent
不完全兼容跨浏览器,另请参见