Javascript回调函数执行

时间:2010-01-06 20:17:08

标签: javascript jquery

我不确定这个的正确用语。但我想编写一个接受另一个函数并执行它的函数。 例如。

function test(data, aFunc) {
   var newData = data + " Shawn";

   aFunc.call(newData);
}

test("hello", function(data){
   alert(data);
});

数据应包含“hello Shawn”字符串。请帮我改写一下正确的方法。

3 个答案:

答案 0 :(得分:5)

call方法的第一个参数用于在调用函数内显式设置this关键字(函数上下文),例如:

function test(data, aFunc) {
   var newData = data + " Shawn";

   aFunc.call(newData);
}

test("hello", function () {
   alert(this); // hello Shawn
});

如果您想在不关心上下文(this关键字)的情况下调用函数,则可以在不call的情况下直接调用它:

function test(data, aFunc) {
   var newData = data + " Shawn";

   aFunc(newData); // or aFunc.call(null, newData);
}

test("hello", function (data) {
   alert(data);
});

请注意,如果您只是调用aFunc(newData);之类的函数,或者使用callapply方法并将this参数设置为null或{ {1}},调用函数中的undefined关键字将引用Global对象(this)。

答案 1 :(得分:2)

看起来不错,但你可以改变

aFunc.call(newData);

aFunc(newData);

答案 2 :(得分:1)

你很亲密。 “call”的第一个参数是“scope”参数。在这种情况下,它并不重要,因为你没有在匿名函数中的任何地方使用“this”,所以任何值都足够了。

function test(data, aFunc) {
   var newData = data + " Shawn";

   aFunc.call(this, newData);
}

test("hello", function(data){
   alert(data);
});