为什么这个匿名函数调用不起作用?

时间:2013-06-04 08:41:44

标签: javascript anonymous-function

为什么会这样

$( '#someid' ).click( function() {
    getdata( 'listing' , function( data ) {
        showlist( data );
    }, 'string' , 1 );
});

工作,但这个不是

$( '#someid' ).click( function() {
    getdata( 'listing' , showlist( data ), 'string' , 1 );
});

4 个答案:

答案 0 :(得分:1)

它不起作用,因为getdata将函数作为第二个参数。在第二个例子中,你执行函数(并传递其返回值)而不是传递函数本身。

如果你写

$( '#someid' ).click( function() {
    getdata( 'listing' , showlist, 'string' , 1 );
});

没有parens ()它仍然有效,但正如您所看到的,您不能再通过data函数中的showlist参数

答案 1 :(得分:1)

在第二个示例中,您正在执行showlist(data)并将其结果值作为getdata()参数。

你可以想象,这个:

getdata( 'listing' , showlist( data ), 'string' , 1 );

与此相当:

var temp = showlist( data );
getdata( 'listing', temp, 'string', 1);

答案 2 :(得分:1)

function( data ) {
        showlist( data );
    }

表示您传入的是匿名函数

showlist( data )

表示您正在调用showList(data)并将返回的值传递给函数。 如果您想正确使用第二种情况,请按以下方式修复:

$( '#someid' ).click( function() {
    getdata( 'listing' , showlist, 'string' , 1 );
});

答案 3 :(得分:0)

因为第一个是将函数作为第二个参数传递给getdata,而第二个是传递调用函数的结果

你可以正确地写第二个

$( '#someid' ).click( function() {
    getdata( 'listing' , showlist, 'string' , 1 );
});

我们不再在此处调用 showlist,而是让getdata稍后再调用它。