JavaScript - 闭包

理解

  • 关于闭包
function fun(n, o) {
    console.log(o);
    return {
        fun: function (m) {
            return fun(m, n);
        }
    }
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);

答案:

 undefined
 0
 0
 0
 undefined
 0
 1
 2
 undefined
 0
 1
 1

用arguments.callee和闭包实现的函数封装

var data = [];
for (var i = 0; i < 3; i++) {
  (data[i] = function () {
    console.log(arguments.callee.i);//此处i不是外部i
  }).i = i;
}
data[0](); //0
data[1](); //1
data[2](); //2

应用

  • 利用闭包实现自动递增计数
var countNumber = (function() {
    var num = 0;
    return function() {
        return ++num;
    }
})();
console.log(countNumber());//1
console.log(countNumber());//2
console.log(countNumber());//3
console.log(countNumber());//4
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 1.执行环境与作用域链 2. 立即执行函数 3. 闭包知识点 3.1 什么是闭包 3.2 使用闭包的意义与注...
    犯迷糊的小羊阅读 646评论 0 11
  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zouCode阅读 1,284评论 0 13
  • 闭包总是让人摸不着头脑。陆陆续续接触了一些闭包的知识,但还是不是非常明白,最近偶然看了一下 jQuery基础教程 ...
    深沉的简单阅读 154评论 0 0
  • 前言 这篇文章使用有效的javascript代码向程序员们解释了闭包,大牛和功能型程序员请自行忽略。 基础篇 闭包...
    kiaizi阅读 372评论 0 7
  • 《明天的你一定感谢今天的自己:时间掌控术》提到了三个提升决断力掌控时间的方法。 1秒决定午餐 许小佩是选择恐惧症患...
    青果果说阅读 204评论 5 5