为什么单独定义的函数不适用于JavaScript中的"domready"事件?

Fra*_*eni 0 javascript domready

我对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);  
    }
}
);
Run Code Online (Sandbox Code Playgroud)

而这段代码不起作用:

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' ) );
Run Code Online (Sandbox Code Playgroud)

我已经用更简单的函数进行测试,它可以工作,例如:

window.addEvent('domready', function() { alert('test'); } )
Run Code Online (Sandbox Code Playgroud)

相当于

function giveMessage() { alert('test'); }
window.addEvent( 'domready', giveMessage())
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Ry-*_*Ry- 5

这是因为你需要删除括号; 函数是一个对象,你需要传递函数,而不是它的返回值.所以,对于你的第一个例子,你应该:

window.addEvent('domready', function() { matchHeight('div#leftcolumn div.module_menu'); } );
Run Code Online (Sandbox Code Playgroud)

代替.对于你的第二个例子,它是:

function giveMessage() { alert('test'); }
window.addEvent( 'domready', giveMessage)
Run Code Online (Sandbox Code Playgroud)

再次,您传递对象giveMessage,而不是调用后获得的结果.