美文网首页
js之闭包函数(蔡哲永)

js之闭包函数(蔡哲永)

作者: 河南蓝鸥科技有限公司 | 来源:发表于2016-04-26 17:54 被阅读102次

很多初学js的可能对于js中的闭包函数有一定的模糊认识,下面我们来看一下闭包函数究竟是何方神圣!

想要了解闭包函数首先我们需要了解一下js中的变量,在js中变量分为两种(局部变量和全局变量)

局部变量:定义在函数内部的变量称为局部变量。

全局变量:定义在函数外部的变量称为全局变量。

不管是局部变量还是全局变量都存在一个作用域的问题,下面我们分别来看一下js中不同的变量的作用域:

如图我们在函数f1种定义了一个变量,此变量因为在函数f1中定义,因此该变量num是一个局部变量,其作用范围只能在当前函数f1中,此时如果外界想要访问该变量num,便会出现对应的错误。如下:

问题:

注意我们在函数中定义变量的时候前面必须添加var关键字,否则定义的变量不再是局部变量,而是一个属于window(窗口)的全局变量,如下代码所示的num就是一个属于window的全局变量:

此时我们可以通过window修改num变量的值,不管是修改前还是修改后我们都可以在函数f1外面访问该变量,不会再出现上面的错误信息,只不过该变量中的值不同,具体访问代码和效果如下图所示:

修改前:

修改后:

闭包函数:

好了扯了那样多,下面我们来看一下闭包函数函数,之前我们说了,再f1中我们通过var关键字定义了一个局部变量num,现在我想要在函数外部访问变量num,之前我们看到会出错,那此时我该如何处理呢?我们可以这样,我们可以在f1中定义另外一个函数f2,此时f2作为f1的子级函数,子级函数会从其上一层开始逐层查找所有的父级函数中的变量,一旦发现存在其要使用的变量,此时可以直接使用其对应父级函数内部的变量。如下所示:

对比上面的代码,我们发现在f1中定义了一个函数f2,并且最终f2作为f1的返回值返回,当外界调用f1时,此时f2被存储在变量fun中,紧接着外界通过fun调用函数f2,并且从外界传入一个数据200,调用过程中将num值修改为200,运行效果如下:

此时f2作为f1内部的函数实现了在函数f1外部访问其局部变量num的操作。由此我们可以得出闭包函数的其中一个作用闭包函数作为一个桥梁,实现在函数外部访问函数内部局部变量的操作。此外闭包函数还有另外一个作用就是保证其所在的函数中的变量的值一直存在。原因如下:

(1)函数f2在函数f1中定义,此时函数f2如果想要存在必须要依赖函数1的存在。

(2)外界在调用函数f1 的同时f2作为返回值被存储在var定义的全局变量fun中,fun作为全局变量存在于整个程序运行过程中,此时f2会被长久存储。

结合上面两点我们不难得出f1和f2会持久存在于程序运行中,其所在的空间会长久存在,因此考虑到节省空间问题,闭包函数在开发过程中尽量少用。

好了今天的探讨就先到这里了。希望能对大家有一定的帮助!

相关文章

  • js之闭包函数(蔡哲永)

    很多初学js的可能对于js中的闭包函数有一定的模糊认识,下面我们来看一下闭包函数究竟是何方神圣! 想要了解闭包函数...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • 前端面试题(持续补充)

    js,node.js基础: 闭包 闭包是能够读取其他函数内部变量的函数。在js中,只有函数内部的子函数可以访问内部...

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • 闭包

    关键词:闭包(closure) 概念:闭包就是能够读取其他函数内部变量的函数,对于js,闭包就是将函数内部和函数外...

  • 2018-01-10

    js中的闭包 一.什么是闭包 闭包官方的解释是:闭包就是能够读取其他函数内部变量的函数。由于在javascr...

  • 闭包小记

    什么是闭包? 闭包就是能够读取其他函数内部变量的函数。在js中,只有函数内部的函数才能读取局部变量,所以闭包就是“...

  • js 闭包 字符串 定时器

    js闭包 闭包的三大特点为: 1、函数嵌套函数2、内部函数可以访问外部函数的变量3、参数和变量不会被回收。闭包的作...

  • js 闭包 字符串 定时器

    js闭包 闭包的三大特点为: 1、函数嵌套函数2、内部函数可以访问外部函数的变量3、参数和变量不会被回收。闭包的作...

  • 闭包——十万个为什么

    什么是闭包? 简单的来说闭包就是函数。那函数是不是闭包呢? 网上有一句话js函数皆是闭包。我觉得这句话是不太准确。...

网友评论

      本文标题:js之闭包函数(蔡哲永)

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