js-闭包

作者: emma1120 | 来源:发表于2018-03-13 09:56 被阅读5次

对于闭包的理解,一直很浅懂,特别有时候跟匿名函数混淆。所以收集下面各路对于闭包的讲解。

维基百科中的解释:“在计算机科学中,闭包(closure)又称语法闭包(Lexisal closure,是引用自由变量的函数,这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不列外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。” “在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可以产生闭包,运行时,一旦外部的函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中引用。”

MDN: “闭包是函数和声名该函数的词法环境的组合”

StackOverflow Morris 的回答: 原文地址链接https://stackoverflow.com/questions/111102/how-do-javascript-closures-work

下面是他关于闭包的回答解释

掌握闭包核心的内容后,闭包就不是难懂的概念。但是,如果去查阅学术性论文或者学术向导的信息那就很难理解了。

本文是面向具有主流语言程序经验的程序员编写,能读懂下面的javascript函数:

function sayHello(name){
    var text='hello'+name;
    var say=function(){
        console.log(text);
    }
    say();
}
sayHello('Joe')
闭包的例子

两句话概括

  • 闭包是支持一级函数的一种方式;它是一种表达式,可以在其作用域内引用变量(第一次声明时),赋值给变量,作为参数传递给函数,或者作为函数结果返回。A closure is one way of supporting first-class functions; it is an expression that can reference variables within its scope (when it was first declared), be assigned to a variable, be passed as an argument to a function, or be returned as a function result.
  • 或者,闭包是一个堆栈框架,当函数开始执行时,它被分配,而在函数返回后不会释放(就像在堆栈上而不是堆栈上分配了一个“堆栈帧”)。Or, a closure is a stack frame which is allocated when a function starts its execution, and not freed after the function returns (as if a 'stack frame' were allocated on the heap rather than the stack!).

下面这段代码就是函数的引用:

function sayHello2(name){
    var text ='hello'+name;//Local variable
    var say = function(){
        console.log(text);
    }
    return say;
}
var say2 = sayHello2('Bob');
say2(); //logs "Hello Bob"

相关文章

  • js-闭包

    对于闭包的理解,一直很浅懂,特别有时候跟匿名函数混淆。所以收集下面各路对于闭包的讲解。 维基百科中的解释:“在计算...

  • js-闭包

  • Js-闭包

    「闭包」 要理解什么闭包,首先要知道闭包为啥出现,实际代码中,我们想在某一的作用域中使用一个变量,很简单,直接在外...

  • js-闭包

    为什么写闭包: 1.被人说复杂,想整清晰.其实很好理解. 2.闭包在开发中用途很多.面试经常问,必须弄懂. 为什么...

  • JS-闭包

    一、闭包简介1、函数内部的函数可以生成闭包2、闭包的应用:需要多个内部变量值3、闭包弊端闭包:会倒致函数运行结束后...

  • js-闭包

    了解闭包前,先了解变量:局部变量和全局变量。 接下来的问题是,如何从外部获取局部变量: 如上,f5可以读取f4中的...

  • JS-闭包

    0.闭包 理解闭包的关键在于:外部函数调用之后其变量对象本应该被销毁,但闭包的存在使得我们仍旧可以访问外部函数的变...

  • js-闭包

    今天学习的概念是闭包一般的计数器需要借助全局变量 var counter = 0; //全局变量function ...

  • JS-闭包

    了解闭包前,首先要知道声明是变量作用域变量根据作用域的不同分为两种:全局变量和局部变量。1.函数内部可以使用全局变...

  • JS-读懂闭包

    长久以来,闭包是前端同学面试必考的问题。会用闭包也成了高级前端开发者的标志,今天就来彻底弄清楚闭包的每一个细节。 ...

网友评论

      本文标题:js-闭包

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