博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js闭包简要分析
阅读量:6437 次
发布时间:2019-06-23

本文共 1000 字,大约阅读时间需要 3 分钟。

  相信大多数接触过js编程的程序员或多或少都对js中的闭包了解一些吧,所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包是 ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下。如果想要扬长避短地使用闭包这一特性,则必须了解它们的工作机制。而闭包工作机制的实现很大程度上有赖于标识符(或者说对象属性)解析过程中作用域的角色。 

     下面我举一个简单的函数执行来说明闭包的工作原理:

我们所熟知的主流语言,像C,java等,在函数内部只要执行了return,函数就会返回结果,然后内存中删除该函数所在的区域.生命周期也就停止了.一般的js函数也是这样. 但是有闭包特性的js函数有点特殊. 就例子来说: function a(){
var i=0; function b(){
alert(++i); } return b; } var c = a(); c(); 这是个标准的闭包.在函数a中定义了函数b,a又return了b的值.这些可以先不管. var c = a(); c(); 这两句执行很重要. 在var c = a();这行里,执行了a函数,那么肯定a经过了return.按照主流语言的函数特性,现在c的值就是a的返回值. 第二行c()的执行实际执行的就是b函数.最后不管执行的是谁,会弹出一个值为0的窗口,到此为止,所有的生命周期按理论来说就算全部结束了. 可是,如果我们再多执行一行. var c = a(); c(); c(); 第一次弹出0,第二次执行却弹出了1. 也就是说,第一次c()后,a中的i依然保留.自然a在内存的栈区依然保留. a是return过了,但是,a及内部值却依然存在,这就是闭包. 在一般的程序中,我们使用闭包主要是为了一个变量的使用,在一个函数的作用域里面定义的变量,不会影响到后面的变量,但是这个方法却可以进行调用这个变量的值,主要的作用就是保护了函数的安全性。
以上便是一个简单的js函数闭包的列子。

 

转载于:https://www.cnblogs.com/lanveer/p/4104614.html

你可能感兴趣的文章
pdf如何解密
查看>>
jquery datatable的详细用法
查看>>
并发编程之 进程
查看>>
ansible 下lineinfile详细使用
查看>>
oracle 用函数返回对象集合
查看>>
猫猫学IOS(二十一)UIApplication设置程序图标右上⾓红⾊数字_联⺴指⽰器等
查看>>
Java(第十五章)
查看>>
Android--静默安装
查看>>
生命有尽,大道无涯
查看>>
JavaScript实现省市二级联动
查看>>
IOS Unit test
查看>>
HttpClient 学习整理[转]
查看>>
2019-05-21 Java学习日记之String类型Demo
查看>>
PHP将两个二维数组合并为一个二维数组的方法
查看>>
再见,2014;你好2015
查看>>
mysql 导入导出.sql文件
查看>>
NIO - Selector源码分析
查看>>
×××S 2012 聚合函数 -- 介绍
查看>>
linux 防火墙 iptables 允许 某个 某段 IP访问 某个端口
查看>>
Open*** 安装脚本
查看>>