JavaScript闭包closure详述

目录
  • 一、什么是闭包
  • 二、 闭包的作用

前言:

JavaScript部分,闭包是很重要的东西,所以我们今天就闭包的相关知识做一总结。首先,在了解闭包前,我们先要知道作用域的相关知识,前面 作用域相关博文有解释,这里不在赘述。接下来我们来看一下什么是闭包?

一、什么是闭包

闭包(closure)指有权访问另一个函数作用域中变量的函数。 ----- JavaScript 高级程序设计

简单理解闭包就是一个函数,他的特点是:一个作用域可以访问另外一个函数内部的局部变量。

举个简单的例子:

比如说我们现在有一个函数,在他的内部我们定义了一个局部变量,如果别的作用域可以访问这个局部变量,就产生了闭包。所以我们在该函数内部再定义另一个函数,看看里面的函数作用域是否可以访问外函数中的局部变量。

 function f1(){
            var num = 10;
            function f2(){
                console.log(num);
            }
            f2();
        }
        f1();

打印的结果为:

可以发现成功将值打印出来,所以就产生了闭包。
但是有的读者可能就有疑问:f2函数本身就在f1函数的内部,它本来就可以使用父函数的变量。那我们再在f1函数的外部的作用域访问该变量,看看结果又是如何。

我们将f2函数的调用改为f1函数的返回值,然后在函数外面调用f1函数,如下:

 function f1(){
            var num = 10;
            function f2(){
                console.log(num);
            }
           return f2()
        }
        var f = f1();
        f();

此时,就相当于f1外部的作用域访问其内部函数的变量。打印结果为:

可以发现,这里也可以使用其内部的局部变量,闭包产生。

所以可以得出结论:

闭包: 一个作用域可以访问另外一个函数内部的局部变量。

二、 闭包的作用

我们知道,在函数内部定义的局部变量,只能在函数内部可以使用,并且当我们使用完成后它就会被销毁,但是有闭包以后,这个局部变量就会在函数外部使用并且要等它的外部调用者调用完毕后才会被销毁,所以闭包的作用就是:延伸了变量的作用范围。

到此这篇关于JavaScript闭包closure详述的文章就介绍到这了,更多相关JavaScript闭包内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Javascript闭包(Closure)详解

    下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. function f1(){ var n=999; } alert(n)

  • 理解javascript函数式编程中的闭包(closure)

    闭包(closure)是函数式编程中的概念,出现于 20 世纪 60 年代,最早实现闭包的语言是 Scheme,它是 LISP 的一种方言.之后闭包特性被其他语言广泛吸纳. 闭包的严格定义是"由函数(环境)及其封闭的自由变量组成的集合体."这个定义对于大家来说有些晦涩难懂,所以让我们先通过例子和不那么严格的解释来说明什么是闭包,然后再举例说明一些闭包的经典用途. 什么是闭包 通俗地讲, JavaScript 中每个的函数都是一个闭包,但通常意义上嵌套的函数更能够体 现出闭包的特性,请看

  • javascript中闭包closure的深入讲解

    简介 闭包closure是javascript中一个非常强大的功能.所谓闭包就是函数中的函数,内部函数可以访问外部函数的作用域范围,从而可以使用闭包来做一些比较强大的工作. 今天将会给大家详细介绍一下闭包. 函数中的函数 我们提到了函数中的函数可以访问父函数作用域范围的变量,我们看一个例子: function parentFunction() { var address = 'flydean.com'; function alertAddress() { alert(address); } al

  • javascript闭包(Closure)用法实例简析

    本文实例讲述了javascript闭包(Closure)用法.分享给大家供大家参考,具体如下: closure被翻译成"闭包",感觉这东西被包装的太学术化.下面参考书本和网上资源简单探讨一下(理解不当之处务请留意). 1.什么是闭包 官方的回答:所谓"闭包",指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 看了上面的定义,如果你不是高手,我坚信你会和我一样愤怒的质问:这tmd是人话吗? 要理解闭包,还是代码

  • 学习Javascript闭包(Closure)知识

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数内部声明变量的时候,

  • JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.很早就接触过闭包这个概念了,但是一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什么,有什么用,今天在网上看到了一篇讲JavaScript闭包的文章(原文链接),讲得非常好,这下算是彻底明白了JavaScript的闭包到底是个神马东东以及闭包的用途了,在此写出来和大家分享一下,希望不理解JavaScript闭包的朋友们看了之后能够理解闭包!以下内容大部分是来自原文,我在原文的基础

  • javascript中闭包(Closure)详解

    在javascript中,函数可看作是一种数据,可以赋值给变量,可以嵌套在另一个函数中. var fun = function(){ console.log("平底斜"); } function fun(){ var n=10; function son(){ n++; } son(); console.log(n); } fun(); //11 fun(); //11 我们把上面第二段代码稍微修改下: var n=10; function fun(){ function son(){

  • JavaScript闭包closure详述

    目录 一.什么是闭包 二. 闭包的作用 前言: 在JavaScript部分,闭包是很重要的东西,所以我们今天就闭包的相关知识做一总结.首先,在了解闭包前,我们先要知道作用域的相关知识,前面 作用域相关博文有解释,这里不在赘述.接下来我们来看一下什么是闭包? 一.什么是闭包 闭包(closure)指有权访问另一个函数作用域中变量的函数. ----- JavaScript 高级程序设计 简单理解闭包就是一个函数,他的特点是:一个作用域可以访问另外一个函数内部的局部变量. 举个简单的例子: 比如说我们

  • javascript 闭包

    对于初学者来说,理解Javascript闭包(closure)还是比较困难的,而撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目,让初学者理解起来更加容易一些. 一.什么是闭包? "官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术. 其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包.不过一般来说,嵌套的func

  • 学习JavaScript中的闭包closure应该注意什么

    目录 闭包简述 1.闭包使得内部函数可以访问外部函数的属性(变量或方法) 2.闭包的广阔应用场景 3.用闭包模拟私有方法 4.从性能角度考虑,非必要不使用闭包 闭包简述 Mozilla 上这样解释闭包:一个函数和对其周围状态(lexical environment,词法环境) 的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure). 也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域.在 JavaScript 中, 每当创建一个函数, 闭包就会在函数创建的同时

  • Javascript 闭包详解及实例代码

    Javascript 闭包 闭包,是 Javascript 比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,很难从定义去理解它.因此,本文不会对闭包的概念进行大篇幅描述,直接上干货,让你分分钟学会闭包! 1 闭包,一睹为快 在接触一个新技术的时候,我首先会做的一件事就是找它的 demo code.对于我们来说,看代码比自然语言更能理解一个事物的本质.其实,闭包无处不在,比如:jQuery.zepto的核心代码都包含在一个大的闭包中,所以

  • 谈一谈javascript闭包

    下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. function f1(){ var n=999; } alert(n)

  • 轻松学习Javascript闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 当function里嵌套function时,内部的function可以访问外部function里的变量. function foo(x) { var tmp = 3; function bar(y) { alert(x + y + (++tmp)); } bar(10); } foo(2) 不管执行多少次,都会alert 16,因为bar能访问foo的参数x,也能访问foo的变量tmp. 但

  • C# 中闭包(Closure)详解

    C# 中闭包(Closure)详解 这个问题是在最近一次英格兰 Brighton ALT.NET Beers 活动中提出来的.我发现,如果不用代码来演示,你很难单用话语把它解释清楚,所以,在这里,我打算用 C# 来解释一下什么是闭包(closures).维基百科上说: 在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外.所以,有另一种说法认为闭包是由函数和与

随机推荐