2013-03-01 55 views
1

为什么这不火:JavaScript的关闭问题

var counter = function() { 

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

counter(); 

但确实:

var counter = function() { 

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

var test = counter(); 
test(); 

好像给一个变量分配功能,使差别,但为什么呢?

+1

您需要在创建后调用该函数。正如你在第二个代码中所做的那样。 – 2013-03-01 07:06:55

+0

这不是一个真正的封闭问题。这只是一个使用函数对象的问题。 – 2013-03-01 07:22:07

回答

3

尝试调用该函数返回

counter()(); 
2

您正在返回一个函数。你也必须调用它。

2

count()返回一个函数。它确实触发了,它不会调用它返回的函数。在第二个示例中,您将返回内部函数,然后通过test()启动它。如果您希望示例类似,请将test = count()更改为test = counter

0

确定你的第一个例子,你要分配

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

的变量。但不要求它的价值。在你的第二个例子中,你将函数赋给变量,然后你调用它。

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

counter(); 

这将火

+0

所以'counter()()','alert'会被触发。 – yuwang 2013-03-01 07:06:24

+1

不!它会写,因为它会开火!例如:http://jsfiddle.net/nucpb/2/ – Jacob 2013-03-01 07:07:57

+0

哦,谢谢你找出这个。 – yuwang 2013-03-01 07:11:17

0

在你的代码

var counter = function() { 

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

counter(); 

你是简单的得到一个功能计数器的回报率()。这就像调用一个返回值的函数并且你没有捕获它。

你必须抓住返回函数,然后像在第二个代码中那样调用它。