如何将参数传递给JS函数而不将其包装在匿名函数中?

时间:2015-12-10 19:55:05

标签: javascript parameter-passing

很长一段时间我都有这个问题:如何将参数传递给JS函数而不将其包装在匿名函数中?

让我们看一个例子:

var
x = 10,
foo = function( num ) {
    console.log("Number: " + num);
};

// This way works, but I wouldn't like to wrap it in an anonymous function
setTimeout(function() {
    foo( x );
}, 1000 );

// Is there a way to pass the 'x' parameter here?
setTimeout( foo, 2000 );

有没有办法在第二个setTimeout调用上传递参数?

1 个答案:

答案 0 :(得分:2)

在现代Javascript引擎中(MDN也有shim that makes this work in IE9 and older):

setTimeout( foo, 2000, x );

或使用bind,这不是很现代,但仍然足够现代,在IE8中没有支持(同样有一个shim on MDN):

setTimeout( foo.bind( null, x ), 2000 );

如果您通常使用上下文调用该函数,则将null替换为您希望this在函数中的任何内容。在上面的示例中,null效果很好。