0

为什么会这样

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

工作,但这个没有

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

4 回答 4

1

它不起作用,因为getdata要求一个函数作为第二个参数。在第二个示例中,您正在执行函数(并传递其返回值)而不是传递函数本身。

如果你写

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

没有括号()它仍然有效,但正如您所看到的,您不能再data沿函数传递参数showlist

于 2013-06-04T08:44:31.503 回答
1

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

你可以想象,这是:

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

是这样的逻辑等价物:

var temp = showlist( data );
getdata( 'listing', temp, 'string', 1);
于 2013-06-04T08:44:55.140 回答
1
function( data ) {
        showlist( data );
    }

表示您正在传入一个匿名函数

showlist( data )

表示您正在调用showList(data)并将返回值传递给函数。如果您想正确使用第二种情况,请像这样修复它:

$( '#someid' ).click( function() {
    getdata( 'listing' , showlist, 'string' , 1 );
});
于 2013-06-04T08:45:33.703 回答
0

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

你可以正确地写第二个

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

我们不再在这里调用 showlist,而是允许getdata稍后调用它。

于 2013-06-04T08:44:42.710 回答