有没有办法将变量传递给回调函数而不将其包装在另一个函数中?

时间:2015-05-17 18:20:23

标签: javascript jquery

我希望我能正确地问这个。

我有jQuery行:

runFunction

并且工作正常。但现在我想将一个变量传递给函数$("main").load("link.html", runFunction(myvar)); ,但是要做

$("main").load("link.html", function() {runFunction(myvar)});

不起作用,因为它正在被立即调用。我知道我能做到

var a = [1, 2, 3]
var b = a
b.append(4) //1, 2, 3, 4
a //1, 2, 3

但是我想知道是否有其他方法可以将变量发送到runFunction而没有额外的包装函数。

1 个答案:

答案 0 :(得分:2)

在幕后,创建一个新函数是不可避免的,因为你传入的“bound”参数绑定到某个范围,你将调用的函数将在不同的范围。要实现这一点,您需要一个闭包,您可以使用内联匿名函数创建它。

也就是说,JavaScript通过Function.prototype.bind调用使这变得更容易。查看bind() on MDN

bind允许您创建前导绑定参数(即,您不能使用它将第二个参数绑定到变量而不是第一个)。

$("main").load("link.html", function() {runFunction(myvar)});

变为

$("main").load("link.html", runFunction.bind(window, myvar)});

请注意,传递给bind的第一个参数是thisArg,它是JavaScript对象,它将与函数体中的this参数关联。