美文网首页
javascript之闭包(closure)

javascript之闭包(closure)

作者: 陈川Lethe | 来源:发表于2017-01-06 18:54 被阅读34次

闭包,这个名字好奇怪,
言归正传,先说一下js函数的变量作用域
以下例子全部基于局部变量

函数内部访问函数外部变量

demo1:

    var a = 100;
    function get() {
        console.log(a)
    }
    get();
    // 运行结果:100

在demo1例子中,变量a是在函数外部声明的,在函数get()当中是可以调用到的,调用get()函数,在浏览器控制台会输出100,也就是a的值。

函数外部访问函数内部声明的变量

demo2:

    function get() {
        var a = 100;
    }
    get();
    console.log(a);
    //运行结果:ReferenceError: a is not defined

在demo2例子中,变量a在函数get()中声明,执行函数get()执行之后,调用变量a,在控制台输出:ReferenceError: a is not defined(a没有被定义),可见,在函数外部是无法直接调用函数内部声明的变量的。
难道就没法获得到函数内部到变量来么?当然不是,这时候闭包就派上用场来,看如下代码:

    function get() {
        var a = 100;
        return function () {
            return a;
        }
    }
    var b = get();
    console.log(b);
    //运行结果:
    /* function () {
        return a;
    }*/
    console.log(b());
    // 运行结果:100

函数get()中返回一个函数,这个函数返回你想要获得到到变量,然后在函数外部就可以通过get()()就可以获得到函数内部到变量的值了,😄。

再来看阮老师博客里的两个例子:

    var name = "The Window";
    var object = {
        name : "My Object",
        getNameFunc : function(){
            return function(){
                return this.name;
            };
        }
    };
    console.log(object.getNameFunc()());
    //输出结果:    (编者注:什么也没有输出)
    var name = "The Window";
    var object = {
        name : "My Object",
        getNameFunc : function(){
            var _this = this;
            return function(){
                return _this.name;
            };
        }
    };
    console.log(object.getNameFunc()());
    //输出结果:My Object

拓展阅读:

阮一峰:学习Javascript闭包(Closure)

相关文章

  • JavaScript----闭包

    javascript之闭包 闭包的概念     闭包(closure)是 JavaScript 的一种语法特性。 ...

  • 闭包

    学习Javascript闭包(Closure)

  • JavaScript深入理解-闭包(Closure)

    推荐文章:学习Javascript闭包(Closure)- 阮一峰javascript深入理解-从作用域链理解闭包...

  • 笔记:JavaScript闭包

    本文摘录及参考自:1. 学习Javascript闭包(Closure)2. 闭包的秘密3. JavaScript ...

  • javascript之闭包(closure)

    闭包,这个名字好奇怪,言归正传,先说一下js函数的变量作用域以下例子全部基于局部变量 函数内部访问函数外部变量 d...

  • JavaScript学习笔记(4) 闭包详解(Closure A

    《JavaScript学习笔记(4) 闭包详解(Closure Are Not Magic)》 ---- 写在开头...

  • js中英文对照

    1.raw javascript:原生javascript2.closure:闭包3.arrow function...

  • JavaScript闭包

    闭包(closure)是 Javascript 语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包...

  • JavaScript函数(二)闭包closure

    闭包 闭包(closure)是 JavaScript 语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。...

  • 浅谈 JavaScript 闭包

    相信学习 JavaScript 的同学都知道「闭包(Closure)」,这个概念在 JavaScript 中是非常...

网友评论

      本文标题:javascript之闭包(closure)

      本文链接:https://www.haomeiwen.com/subject/ludxbttx.html