传递JavaScript函数作为参数

传递JavaScript函数作为参数

如何将函数作为参数传递,而不需要在“父”函数中执行或使用eval()?(因为我读到它是不安全的。)

我有这个:

addContact(entityId, refreshContactList());

很管用,但问题是refreshContactList当函数被调用时触发,而不是在函数中使用时触发。

我可以用eval()但根据我所读到的,这不是最好的做法。如何在JavaScript中将函数作为参数传递?


不负相思意
浏览 842回答 3
3回答

潇湘沐

您只需删除括号:addContact(entityId, refreshContactList);然后,在不首先执行函数的情况下传递函数。以下是一个例子:function addContact(id, refreshCallback) {     refreshCallback();     // You can also pass arguments if you need to     // refreshCallback(id);}function refreshContactList() {     alert('Hello World');}addContact(1, refreshContactList);

陪伴而非守候

如果您想传递一个函数,只需按名称引用它,不要使用括号:function foo(x) {     alert(x);}function bar(func) {     func("Hello World!");}//alerts "Hello World!"bar(foo);但有时您可能想传递一个函数包括论点,但在调用回调之前不会调用它。为此,在调用它时,只需将其包装在一个匿名函数中,如下所示:function foo(x) {    alert(x);}function bar(func) {    func();}//alerts "Hello World!" (from within bar AFTER being passed)bar(function(){ foo("Hello World!") });如果您愿意,也可以使用应用函数,并具有第三个参数,即参数数组,如下所示:function eat(food1, food2){     alert("I like to eat " + food1 + " and " + food2 );}function myFunc(callback, args){     //do stuff     //...     //execute callback when finished     callback.apply(this, args);}//alerts "I like to eat pickles and peanut butter"myFunc(eat, ["pickles", "peanut butter"]);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript