资讯专栏INFORMATION COLUMN

闭包的几个例子

OBKoro1 / 2492人阅读

摘要:记录关于闭包的几个例子,网上介绍闭包文章很多,暂时就不作解释。作用域链的延伸必须出去全局函数占位符函数参数循环中的闭包正常输出的方式迭代器中的闭包这些问题如果都理解,那么闭包应该算是比较理解了

记录关于闭包的几个例子,网上介绍闭包文章很多,暂时就不作解释。

1.作用域链的延伸
    var global = 1;
    function outer(){
        var outer_local = 2;
        function inner(){
            var inner_local = 3;
            return inner_local + outer_local + global;
        }
        return inner();     //必须return出去
    }

    inner();    // 6
2.全局函数占位符
var inner;  //placeholder
var F = function(){
    var b = "local variable";
    var N = function(){
        return b;
    }
    inner = N;
}

F();
inner();   // "local variable"
3.函数参数
function F(param){
    var N = function(){
        return param;
    };
    param++;
    return N;
}

var inner = F(123);
inner();   // 124
4.循环中的闭包
function F(){
    var arr = [], i;
    for(i = 0; i < 3; i++){
        arr[i] = function(){
            return i;
        };
    }
    return arr;
}

var arr = F();
arr[0]();  // 3;
arr[1]();  // 3;
arr[2]();  // 3;

正常输出0,1,2的方式:

function F(){
    var arr = [], i;
    for(i = 0; i < 3; i++){
        arr[i] = (function(x){
            return function(){
                return x;
            }
        }(i));
    }
    return arr;
}
5.迭代器中的闭包
function setup(x){
    var i = 0;
    return function(){
        return x[i++];
    }
}

var next = setup(["a","b","c"]);
next();  // "a"
next();  // "b"
next();  // "c"

这些问题如果都理解,那么闭包应该算是比较理解了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86869.html

相关文章

  • JavaScript:面试频繁出现几个易错点

    摘要:针对于面向对象编程的。因为面向对象就是针对对象例子中的守候来进行执行某些动作。这就是闭包的用途之一延续变量周期。把变量放在闭包里面和放在全局变量里面,影响是一致的。 1.前言 这段时间,金三银四,很多人面试,很多人分享面试题。在前段时间,我也临时担任面试官,为了大概了解面试者的水平,我也写了一份题目,面试了几个前端开发者。在这段时间里面,我在学,在写设计模式的一些知识,想不到的设计模式...

    VincentFF 评论0 收藏0
  • 前端基础进阶(六):在chrome开发者工具中观察函数调用栈、作用域链与闭包

    摘要:在的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察的执行过程,直观感知函数调用栈,作用域链,变量对象,闭包,等关键信息的变化。其中表示当前的局部变量对象,表示当前作用域链中的闭包。 showImg(https://segmentfault.com/img/remote/1460000008404321); 在前端开发中,有一个非常重要的技能,叫做断点调试。 在chrome...

    draveness 评论0 收藏0
  • 模块化、闭包与立即执行函数的使用、MVC里的V和C

    摘要:模块化里的和闭包与立即执行函数的使用这篇文章记录我写在线个人简历过程中学习的知识完整代码暂未完成预览地址轮播组件的使用英文官网中文网使用方法模块化学习写代码的方法抄运行修改模块化把对应功能放到块里面这个块可以是文件或者或者别的等等立即执 模块化、MVC里的V和C、闭包与立即执行函数的使用 这篇文章记录我写在线个人简历过程中学习的知识完整代码(暂未完成)预览地址 轮播Swiper组件的使...

    2501207950 评论0 收藏0
  • javaScript作用域与闭包

    摘要:闭包里面保存的变量只有被方法引用了的变量这个例子里,闭包里只有并没有。那最后来说说的问题闭包到底是什么闭包是一个作用域。鉴于在的调试窗口,是放在下面的那闭包这个作用域是个什么范围被后代方法子方法,孙子方法。。。 首先给js的作用域这个话题打标签:2,var, 全局变量,局部变量,函数,undefined, 作用域提升,赋值不会提升,ReferenceError, 同名覆盖。打完标签之后...

    Reducto 评论0 收藏0
  • JavaScript 函数式编程 -- 划重点了!!!

    摘要:函数是一等公民在谈到函数式编程的时候,很多时候会听到这样一句话函数是一等公民。变量作用域和闭包变量作用域变量的作用域和闭包作为的基础,在学习函数式编程中是非常重要的,只有理解了它们,你才能更好的去理解我们后面要讲到的高阶函数和部分应用等。 函数是一等公民 在谈到函数式编程的时候,很多时候会听到这样一句话 函数是一等公民。那我们如何去理解这句话呢? 一等 这个术语通常用来描述值。所以当...

    weizx 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<