0

我在一个函数中创建一个变量,然后调用另一个函数,我需要将此变量传递给该函数,我该怎么做?

目前的代码:

$('.search-btn').click(function(){
var desiredPage = $(this).attr('goto');
//other code is here
setTimeout(showDesiredPage(), 600);
});

然后:

function showDesiredPage(desiredPage){
// other code happens
$('#'+desiredPage).addClass('current-page');
}

谢谢!

4

3 回答 3

8
setTimeout(showDesiredPage(), 600);

不正确,应该是

setTimeout(showDesiredPage, 600);

请注意函数后面缺少的括号!第一行将(立即执行的)函数的返回值移交给 setTimeout,而后者移交函数引用,然后在 600 毫秒后执行!因此,在第一个示例中,您的代码会立即触发,然后 setTimeout 会尝试调用函数的返回值。

这就是为什么你不能以“明显”的方式交出参数的原因。如果你想这样做,你需要一个(匿名)函数包装器

setTimeout(function(){showDesiredPage(desiredPage)}, 600);

这会将一个函数对象(=类似于函数引用的类型)传递给 setTimeout,然后将在 600 毫秒后调用该对象。现在,在函数内部,您可以像往常一样使用参数调用所需的函数。

可以直接传递参数(参见 MDN:setTimeout) ,但不幸的是 Internet Exploder 不支持这种语法。

var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);
于 2013-06-11T11:38:23.357 回答
3

试试这个:

$('.search-btn').click(function () {
    var desiredPage = $(this).attr('goto');
    //other code is here
    setTimeout(function () {
        showDesiredPage(desiredPage);
    }, 600);
});

这会将变量传递desiredPage给函数showDesiredPage()

于 2013-06-11T11:38:36.637 回答
1

您需要包含要传递给 function() 的变量。

$('.search-btn').click(function(){ var desiredPage = $(this).attr('goto'); //其他代码在这里 setTimeout(showDesiredPage(desiredPage), 600); });

function showDesiredPage(desiredPage){
// other code happens
$('#'+desiredPage).addClass('current-page');
}

编辑:以上将通过值,但时间延迟将不起作用。

它应该像

$('.search-btn').click(function(){
    var desiredPage = $(this).attr('goto');
    //other code is here
    setTimeout(function () {
        showDesiredPage(desiredPage);
    }, 600);
    });

    function showDesiredPage(desiredPage){
    // other code happens
    $('#'+desiredPage).addClass('current-page');
    }
于 2013-06-11T11:39:07.250 回答