2010-01-06 9 views
1

Я не уверен, что правильный термин для этого. Но я хочу написать функцию, которая принимает другую функцию и выполняет ее. Для примера.Выполнение функций обратного вызова Javascript

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

    aFunc.call(newData); 
} 

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

Данные должны содержать строку «hello Shawn». Помогите мне переписать это правильно, пожалуйста.

+1

Термин, который вы ищете, это «функция более высокого порядка», – Breton

ответ

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); или использовать call или apply методов с this аргументом, установленным в null или undefined, в this ключевом слове внутри вызываются функция будет ссылаться на глобальный объект (window).

2

Выглядит хорошо, но вы можете просто изменить

aFunc.call(newData); 

в

aFunc(newData); 
1

Вы были близки. Первым аргументом для «вызова» является аргумент «scope». В этом случае не имеет значения, что это такое, потому что вы не используете «это» где-либо в своей анонимной функции, поэтому любое значение будет достаточным.

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

    aFunc.call(this, newData); 
} 

test("hello", function(data){ 
    alert(data); 
}); 
Смежные вопросы