我知道在JS中可以使用函数作为参数。
当我将alert("d")语句作为参数传递时--一切都会触发。
dc.embed.load('http://www.documentcloud.org/search/embed/', {some json
}, alert("d"));但是当我传递一个完整的on函数时--该语句就不会触发。
dc.embed.load('http://www.documentcloud.org/search/embed/', {some json
}, function() {
alert("d");
});为什么可能会触发警报--但匿名函数不会触发?
发布于 2014-03-06 13:13:43
在第一种情况下,调用alert("d")并将其结果undefined作为第三个参数传递给函数。因此,警报甚至在调用load函数之前就会运行。在第二种情况下,第三个参数是一个实际的函数,如果它被调用,它将执行警报。它看起来好像从未被调用过。您需要调查dc.embed.load函数的行为,并查看它如何以及何时调用您作为第三个参数传递的函数。
发布于 2014-03-06 13:14:34
在第一种情况下,你正在调用函数,在第二种情况下,你正在传递一个函数体,但它并没有被调用。
发布于 2014-03-06 13:17:25
您根本没有调用第二个方法中的函数。我认为这第三个变体可能会帮助你更好地理解它,以及Scott的答案:
dc.embed.load('http://www.documentcloud.org/search/embed/', {some json
}, function() {
alert("d");
}() // <- note the () here
);只发送一个函数与执行以下操作类似:
dc.embed.load('http://www.documentcloud.org/search/embed/', {some json
}, alert
);所以我在这里的第一个例子(某种程度上)与你的第一个例子相匹配,因为函数是被调用的,而不仅仅是传递它。另外,我的第二个示例与您的第二个示例相匹配,因为我们只是将函数体作为参数传入。
要在最简单的示例中理解它的工作原理,请比较以下情况下变量的值:
var a = alert;
var a = alert('hey');他们尝试这样做,例如:
a('hello there'); // for both caseshttps://stackoverflow.com/questions/22215524
复制相似问题