对javascript闭包的基本理解
来源:互联网 发布:普天网络 编辑:程序博客网 时间:2024/05/16 10:07
闭包是javascript中的一个重要概念,有关闭包的问题经常出现在各大网站总结的面试题上,在日常开发中,我们也会不经意的使用闭包而不自知,今天就来讲一讲闭包
一些经典的javascript书籍上大多对于闭包有了明确的定义,《javascript高级程序设计》上是这样写的:
闭包是指有权访问另一个函数作用域中的变量的函数。
在《你不知道的javascript》中是这样的:
当函数可以记住并访问所在的词法作用域时,就产生的闭包,即使函数是在当前词法作用域之外执行。
注意这两个定义都提到的作用域,所以对闭包的理解要从javascript的作用域开始。其实javascript的作用域就是由你再写代码时将变量和块作用域写在哪里决定的,javascript引擎在查找变量的时候会由内而外逐级查找,比如像这样:
function f(a){var b=a; function t(){ console.log(b); }}f(2);//2
如果我们想在代码中展示闭包,那么应该是这样:
function f(){ var a =2; function bar(){ console.log(a); } return bar;} }var bz=f();bz(); //2
bar()被定义在f()中,却在f()之外执行,按道理来说应该取不到a的值,因为此时按照作用域的查找方式是找不到变量a的,但实际上bz()可以执行成功,这就是闭包的作用。也就是说当我们将函数bar作为一个值去传递的时候,它可以一直保持一个对其本身定义位置的作用域的引用。无论我们用什么方式,直接或者间接的传递这个函数,比如你可以这样:var fn;function f(){ var a =2; function bar(){ console.log(a); } fn = bar;} function bz(){ fn();}bz(); //2综上,闭包可以总结为两句话:将一个函数通过各种方式传递到它的作用域外执行,就会产生闭包。而闭包的作用就是让这些函数仍然能够引用它原有的作用域。
阅读全文
0 0
- 对javascript闭包的基本理解
- 我对Javascript闭包的理解
- 对Javascript中的闭包的理解
- javascript对闭包的深入理解
- javascript对闭包的理解
- JavaScript-对闭包的理解
- 对JavaScript闭包的理解
- 对javascript闭包的理解(很好的文章)
- 考一下你对Javascript闭包的理解
- 个人对JavaScript闭包的一些理解
- Javascript初学者关于对闭包的理解
- JavaScript进阶:谈谈对闭包的理解
- 对闭包的理解
- javaScript的征程一-关于对javascript的基本理解
- 对javascript半包理解
- 理解javascript的闭包
- 理解Javascript的闭包
- 理解Javascript的闭包
- [leetcode]35. Search Insert Position(Java)
- 33 款主宰 2017 iOS 开发的开源库
- 刷清橙OJ--A1099.星期几
- 剑指offer-跳台阶-dp
- JS倒计时发送代码
- 对javascript闭包的基本理解
- 怎么把xml文件用java写
- solr教程
- 房卡麻将分析之“缺人玩法”
- 给 Android 开发者的 RxJava 详解
- PYTHON学习路径计划图整理
- Kotlin中的函数
- java编译字符串执行
- 高阻态