为什么这个闭包返回函数
Why does this closure return function?
在观看Learning to Love JavaScript时,我对为什么第二个版本不起作用感到困惑。它只是返回"function"。闭包是否不允许直接分配变量?
function getCtr() {
var i = 0;
return function() {
console.log(++i);
}
}
var ctr = getCtr();
ctr();
ctr();
ctr();
/* console
1
2
3
*/
/*--------------------------------------
* This doesn't work
*/
var ctr = function() {
var i = 0;
return function() {
console.log(++i);
}
}
ctr();
ctr();
ctr();
/* console
* => [Function]
*/
视频链接http://youtu.be/seX7jYI96GE?t=11m12s
它打印它,因为函数确实返回了一个函数。
尝试
ctr()();
您使用的两种形式的函数声明具有几乎完全相同的效果。两者都只需创建一个函数并将其绑定到一个符号。在第二个版本中,您真正更改的只是所涉及的名称("ctr"而不是"getCtr")。
也就是说,如果你的测试像第一次设置一样:
var actualCtr = ctr();
actualCtr();
actualCtr();
actualCtr();
你会发现它真的是一样的。
在您的第一个版本中,您定义了一个函数getCtr。然后调用getCtr,将结果保持为ctr。然后重复调用ctr。您正在调用调用函数的结果。
在第二个版本中,您将ctr定义为第一个函数,然后重复调用它。您没有调用调用函数的结果。
下面是您的第二个代码的一个版本:
var ctr = (function() {
var i = 0;
return function() {
console.log(++i);
}
})();
ctr();
ctr();
ctr();
相关文章:
- 使用返回函数sinde.attr()jquery元素
- 从自执行函数返回函数的Javascript性能命中率
- Node Express Handlebars帮助程序未返回函数的结果
- 未在Firefox中执行PageMethod的返回函数
- 对返回函数的函数感到困惑
- 从承诺返回不返回函数会导致警告
- 从函数返回函数而不调用返回的函数
- Javascript,闭包中的返回函数如何与外部函数连接
- 为什么Coderbyte.com's的Javascript模板喜欢返回函数的原始参数
- 对象函数返回函数而不是值
- 从外部函数(数组)了解返回函数(x)
- 从Javascript类对象返回函数
- 调用Typescript setter don't返回函数,尽管关联的getter可以工作
- 使用依赖注入在 JavaScript 中返回函数
- 通过单击JSP和javascript加载两个返回函数
- 需要说明:无法理解返回函数的javascript
- 简单的onClick返回函数不起作用
- 为什么这个闭包返回函数
- JS函数返回函数供以后使用-未定义参数
- Coffeescription类中的方法返回函数而不是字符串