2013-03-01 2 views
1

Почему это не пожар:JavaScript укупорочные выпуск

var counter = function() { 

    return function() { 
     alert('Fire!'); 
    } 
} 

counter(); 

но это делает:

var counter = function() { 

    return function() { 
     alert('Fire!'); 
    } 
} 

var test = counter(); 
test(); 

Похоже, назначая функцию переменной делает разницу, но почему?

+1

Вам необходимо вызвать функцию после ее создания. как вы делаете во втором коде. –

+0

Это не проблема закрытия. Это просто проблема использования объекта функции. –

ответ

3

Попробуйте вызвать функцию вернулся

counter()(); 
2

Вы возвращаете функцию. Вы тоже должны это назвать.

2

count() возвращает функцию. Он срабатывает, он просто не вызывает функцию, которую он возвращает. Во втором примере вы возвращаете внутреннюю функцию, , затем, стреляя по test(). Если вы хотите, чтобы примеры были похожими, измените test = count() на test = counter.

0

Ok с первым примером, вы назначаете

function() { 
    alert('Fire!'); 
} 

переменной. Но не просите о его ценности. Во втором примере вы назначаете функцию переменной, как указано выше, а затем вы вызываете ее.

0
var counter = function() { 
     alert('Fire!'); 
} 

counter(); 

Это огонь

+0

поэтому с помощью 'counter()()' '' alert' будет запущен. – yuwang

+1

Нет! он стрелял, как написано! Например: http://jsfiddle.net/nucpb/2/ – Jacob

+0

ooh, спасибо за выяснение этого. – yuwang

0

В коде

var counter = function() { 

    return function() { 
     alert('Fire!'); 
    } 
} 

counter(); 

вы просто получаете функцию возврата счетчика(). Это похоже на вызов функции, которая возвращает значение, и вы его не поймаете.

Вам нужно поймать функцию возврата, а затем вызвать ее, как вы это сделали во втором коде.

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