2015-10-10 2 views
2

Я хочу запустить функцию, отправленную как параметр в JavaScript, например, я создаю этот скрипт, я хочу, чтобы из этого скрипта печатался «успешный тест», но сценарий печатал функцию кита в виде текста. Таким образом, как я могу запустить функцию, отправленную как параметр функции?Как запустить функцию на JavaScript?

test=function (p1) { 
     return p1;    
    } 
var result=test(function(){ 
    return "successful test"; 
}); 
console.log(result); 
+0

вы хотите 'возвращение p1();' –

+0

Я хочу, чтобы вернуть результат p1 –

+0

да, что это правильно - то есть то, что вам нужно изменить свой код для 'return p1()', а не 'return p1' –

ответ

4

Вы должны вернуть return p1();

var test=function (p1) { 
     return p1();    
    } 
var result=test(function(){ 
    return "successful test"; 
}); 
console.log(result); 

JSFiddle demo

2

код должен быть таким:

test=function (p1) { 
     return p1;    
    } 

var result=test(function(){ 
    return "successful test"; 
}()); 


console.log(result); 
+0

Мне это нравится, потому что он не заставляет' p1' быть функцией. Это самоназвание, поэтому он разрешает стандартную переменную. – aviemet

1

Объяснение

Для вызова п unction, переданный как параметр другой функции в javascript, вы можете просто вызвать его, используя скобки, как обычно.

function myFunction(callback) { 
    return callback(); 
} 

Однако, вы можете также использовать методы прототипа функции Function.prototype.apply() и Function.prototype.call().

Пример

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 

 
    <meta charset="UTF-8"> 
 

 
</head> 
 

 
<body> 
 

 
    <script> 
 
    function myFunction() { 
 
     return 'success <br />'; 
 
    } 
 

 
    function simpleInvocation(fn) { 
 
     document.write('<h1>simple</h1>'); 
 
     return fn(); 
 
    } 
 

 
    function callInvocation(fn) { 
 
     document.write('<h1>call</h1>'); 
 
     return fn.call(this); 
 
    } 
 

 
    function applyInvocation(fn) { 
 
     document.write('<h1>apply</h1>'); 
 
     return fn.apply(this); 
 
    } 
 

 
    document.write(simpleInvocation(myFunction)); 
 

 
    document.write(callInvocation(myFunction)); 
 

 
    document.write(applyInvocation(myFunction)); 
 
    </script> 
 

 
</body> 
 

 
</html>

Смежные вопросы