2013-09-14 3 views
3

Когда я вызываю функцию hi()() с двойными скобками, функция отображает вывод hi, а также дает ошибку, говоря, что hi не работает.Функция вызова в Javascript с двойными скобками

<html> 
    <head></head> 
<script> 

function hello() 
{ 
    document.write("hello"); 
} 
function hi() 
{ 
    document.write("hi"); 
    return "hello"; 
} 
hi()(); 
</script> 
</html> 

Каков смысл использования ()() с именем функции?

ответ

8

двойной скобка было бы полезно, если hi вернулся функцию вместо его имени, как в

function hi(){ 
    return hello; 
} 
hi()(); 

Это, вероятно, что было намерение.

+1

Или 'window [hi()]();': P – Oleg

+1

@Oleg Да, но это не улучшилось бы. –

3

Возвращаемое значение этой функции - это строка, которая не является вызываемым объектом.

function hi() 
{ 
    document.write("hi"); 
    return "hello"; // <-- returned value 
} 

Но если вы хотите многократно вызывать эту функцию, вы можете использовать for-loop или некоторые другие вещи.

Пример привет()():

function hi(){ 
    return function(){ // this anonymous function is a closure for hi function 
     alert('some things') 
    } 
} 

JS Fiddle: here

Если вы хотите вызвать hello функцию сразу после hi попробовать это:

function hi() 
    { 
     document.write("hi"); 
     return hello; //<-- no quote needed 
     // In this context hello is function object not a string 
    } 
5

Ввод () после того, как что-то, что оценивает функцию, вызовет эта функция. Итак, hi() вызывает функцию hi. Предполагая, что hi возвращает функцию, тогда hi()() вызовет эту функцию. Пример:

function hi(){ 
    return function(){return "hello there";}; 
} 

var returnedFunc = hi(); // so returnedFunc equals function(){return "hello there";}; 
var msg = hi()();   // so msg now has a value of "hello there" 

Если hi() не возвращает функцию, то hi()() выдаст ошибку, подобную Набрав что-то вроде "not a function"(); или 1232();.

0

Вы можете использовать eval(), чтобы выполнить его, даже если это строка: eval(hi()+'()');

+0

менее злой способ сделать то же самое будет 'window [hi()]()' – Stuart

1

()() означает, что вызов функции, и если возвращает другую функцию второй скобки будем называть it.please найти ниже пример:

function add(x){ 
    return function(y){ 
     return x+y; 
    } 
} 

добавить (3) (4)

выход: 7

в вышеупомянутом случае добавления (4) будет вызываться для добавления функции и dd (3) вызывается для возвращаемой функции. здесь значение параметра x равно 3, а параметр y равен 4.

Обратите внимание: мы используем скобки для вызова функции.

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