函数JavaScript权威指南–基础篇4
一.知识点–函数–闭包
1.要理解函数闭包,要先知道几个概念:
①块级作用域和函数作用域的概念

  • FAQ:什么是块级作用域?

在类C语言中是这么定义的:变量的作用域由花括号限定,称为块级作用域。在块级作用域下,所用变量都在定义的花括号内,从定义开始到花括号结束这个范围内可以使用,出了这个范围就访问不到了。
C#例子:

void Main(string[] args){if(true){int a = 10;}System.Console.WriteLine(a);//访问不到a}

②变量作用域和函数作用域链

  • FAQ:什么是变量作用域?

一个变量的作用域(scope)是程序源代码中定义这个变量的区域。全局变量拥有全局作用域,在JavaScript代码中的任何地方都是有定义的。在函数内声明的变量只在函数体内有定义,是局部变量,作用域也就只在函数内。
打个比方,全局变量比作景区通票,可以游览整个景区,而局部变量就好比景区内单独收费的特殊项目,只有你交了这个特殊项目的钱,才能去玩。

  • FAQ:什么是函数作用域?

在JS中没有块级作用域,取而代之使用函数作用域(function scope):变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。

  • FAQ:什么是作用域链?

理解作用域链前先要知道,JavaScript是基于词法作用域的语言:通过阅读包含变量定义在内的数行源码就能知道变量的作用域。全局变量在程序中始终是有定义的,局部变量在声明它的函数体内以及其所嵌套的函数内始终是有定义的。
那么,什么是作用域链呢?你可以把它理解为一些对象的集合或链表,这些对象可以被函数或全局代码块来访问。当函数或代码块访问属性时,会遍历这个对象的集合,从调用最先执行的对象里找属性,依次遍历集合里的对象,直到全局对象,找不到属性时抛出异常。

  • FAQ:什么是闭包?

那么,问题终于可以解决了,什么是闭包呢?
当一个函数内嵌套了另一个函数,那么外部的函数就又多了一个函数作用域,作用域链又多了对象,按照作用域链的特性,嵌套函数是可以访问到包含它的外部函数的变量的,此时,嵌套函数就可以对这些变量做一些操作,再把变量作为返回值返回。当外部函数将嵌套的函数对象作为返回值返回的时候,任何时候在全局下调用这个外部函数,都能访问到其内部的变量,这就构成闻名江湖的闭包啦~
③例子
例子1.1:访问不到局部变量n
 

 function f(){var n=111;}alert(n); // error

例子1.2:闭包-访问局部变量

function f(){var n = "local scope";//局部变量function fn(){//对局部变量n进行操作n= 111;return n;}return fn();//f将嵌套函数fn的执行结果作为返回值返回
}
var a = f();
console.log(a);//111

此时在全局下就能访问到局部变量n了,并且局部变量n始终保持在内存中。
例子2:拓展–关于未声明的变量

console.log('第一次a=',a);//undefined
if(!"a" in window){//不进去var a = "111";console.log('第二次a=',a);
}
console.log('第三次a=',a);//undefined
/**执行顺序相当于:* var a;* console.log('第一次a=',a);* console.log('第三次a=',a);* **/

当访问了一个未声明的变量时,JavaScript会在全局自动定义一个变量,所以在执行语句之前,已经声明了变量a,那么if()语句是不进去的。所以输出a的值为undefined。

函数闭包--JavaScript权威指南--基础篇4相关推荐

  1. javascript基础知识完整笔记--------权威指南基础篇

    (一)JS初次使用: 1.搭建JS开发环境: (1)在控制后台输出:console.log(). (2)在HTML页面输出: 1).html页面元素事件中输出,如οnclick="" ...

  2. FreeSWITCH权威指南-基础篇-1.2-电话实现技术

    文章目录 1.2 电话实现技术 1.2.1 电话号码 1. 固定电话号码 2. 移动电话号码和专用号段 3. 短号码 4.800和400号码 5. 北美电话号码分类计划 6. 电话号码的书写格式 1. ...

  3. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  4. 《JavaScript权威指南》——JavaScript核心

    前言 这本由David Flanagan著作,并由淘宝前端团队译的<JavaScript权威指南>,也就是我们俗称的"犀牛书",算是JS界公认的"圣经&quo ...

  5. 你是怎么看完《JavaScript权威指南》《JavaScript高级程序设计》等这类厚书的?

    参考博客原址:https://www.cnblogs.com/tonykair/p/7502276.html 你是怎么看完<JavaScript权威指南><JavaScript高级程 ...

  6. JavaScript权威指南(第6版)

    JavaScript权威指南(第6版) 编辑推荐 经典权威的JavaScript工具书 本书是程序员学习核心JavaScript语言和由Web浏览器定义的JavaScript API的指南和综合参考手 ...

  7. 《JavaScript权威指南》笔记(一)

    2019独角兽企业重金招聘Python工程师标准>>> <JavaScript权威指南>真是名符其实的好书!真遗憾初学JavaScript时没有立即读这本书,甚为遗憾.不 ...

  8. Javascript权威指南学习笔记一:数据类型

    决定从最基础的开始学JavaScript,最近看了<<Javascript权威指南>>第3章,记些笔记备忘. 本章一个重点是类型.按我的理解应该如下表所示: 复合类型中,关联数 ...

  9. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

最新文章

  1. apt Could not get lock /var/lib/dpkg/lock 解决方案
  2. CSS3伪类选择器:nth-child()(nth-child(odd)/nth-child(even))
  3. 三十五例网络故障排除方法
  4. spring 加载java类_在Spring中基于Java类进行配置的完整步骤
  5. 跨越原理优缺点_请教:单管跨越式和双管式的优缺点
  6. SLIC超像素分割详解(一)(二)(三)
  7. ScrollDown的基本操作
  8. Windows10使用命令行打开3389_如何在Windows 10上安装Python 3和设置本地编程环境
  9. 快手-艳云脚本云控系统
  10. 三星s4流量显示无服务器,揭开隐藏功能的面纱 GALAXY S4使用指南
  11. 7-6 jmu-Java-01入门-开根号
  12. 工作10年写不好一封邮件?
  13. 小说形象特征包括哪些方面_小说的基本特征是塑造人物形象
  14. python期末试题汇总
  15. 商务邮箱一般用什么邮箱正式?VIP邮箱名怎么设置好?
  16. 【无标题】 6UVPX 总线架构的高性能实时信号处理
  17. 光脚丫学LINQ(006):投影
  18. 微信小程序开发(1)—— 微信小程序申请注册提交审核并发布详细流程
  19. 学生教育云平台登录入口_国家中小学网络云平台登录入口_国家中小学网络云平台...
  20. 巧用clang 的sanitize解决realloc,malloc,calloc失败

热门文章

  1. vue cli4 兼容IE浏览器
  2. Linux 4.13/4.14内核中带来的ULP(Upper Layer Protocol)
  3. 《笑话大全》APP代码详解1
  4. 以太网卡驱动程序移植linux,基于S3C2440的DM9000网卡驱动的移植
  5. asp html转word文档,【转】利用ASP导出文档到WORD或Excel
  6. 渗透测试-getshell学习总结
  7. 如何禁用计算机防病毒程序,如何停用防病毒
  8. 考研分享:炎炎夏日中清凉复习的三大妙招
  9. 用JS实现:图片压缩、图片加密
  10. stata代码命令全集:跟检验do文件、stata常用命令、代码大合集、面板熵值法