JS闭包分享

S的闭包用法给开发带来了极大的便利,它的使用方式很是天然,以致于不少同窗并不很了解闭包,却能够在实际开发中顺畅的使用了

闭包

例以下面的代码,给button添加一个点击事件,不少人常常这么写,实际上这就是一个闭包函数

 

 

 

要了解闭包,须要先了解下JS变量的做用域

变量的做用域无非就是两种:全局变量和局部变量

特色是 函数内部能够访问外部变量,函数外部不能访问函数内的变量

事件

例如内存

 

 

 

这个很好理解,那么如何从外部读取局部变量?

那就是在函数的内部,再定义一个子函数,这个子函数能够访问外部的变量,而后父函数把这个子函数return,让外部能够经过子函数访问本身的局部变量

例如作用域

 

 

 

这个实现方式就是闭包

什么是闭包

闭包其实就是将函数内部和函数外部链接起来的一座桥梁,可让函数外部的代码访问函数内容变量,能够把闭包简单理解成“定义在一个函数内部的函数”

闭包在子做用域中保存了一份在父级做用域取得的变量,这些变量不会随父级做用域的销毁而销毁,由于他们已常常驻内存了

闭包应用示例

(1)实现公共、私有做用域控制

开发

既然闭包能够对外提供访问内容变量的方式,就能够用这个特色实现相似 public private 做用域的需求it


 

 

(2)循环添加DOM事件

先看下面的代码,目标是点击不一样的输入框给出不一样的提示

io

这是个经典案例,开发中很容易出现相似错误for循环

 

 

 

实际运行后,会发现,无论点击哪一个输入框,都会提示年龄的信息

function

下面的是正确方式,能够按照需求正常显示


 

 

缘由第一种方式出现错误,是由于在for循环结束后,变量item的值已经变为了最后一项,因此当点击事件执行时,读取的信息老是最后一项的信息而第二个方式就是利用了闭包会把父级变量保存到本身做用域的特色,这样每次循环添加点击事件时,把当前循环中变量值传给了function,这样function就保存了正确的变量值

相关文章
相关标签/搜索