JavaScript闭包详解及案例

一. 变量作用域

  1. 函数内部可以使用全局变量
  2. 函数外部不可以使用局部变量
  3. 当函数执行完毕时,本作用域内的局部变量会被销毁

二. 闭包

  1. 闭包:有权访问另一个函数作用域中变量的函数(变量所在的函数就是闭包函数,闭包就是典型的高阶函数)
  2. 闭包的作用:延申了变量的作用范围
//方法一
function fn() {var num = 10;return function() {console.log(num);}
}
var f = fn();
f();  //10
//方法二
function fn() {var num = 10;function fn1() {console.log(num);}return fn1();
}
fn();  //10

三. 案例

  1. 案例1:点击每一道菜会打印出相应索引号
<body><ul class="nav"><li>红烧茄子</li><li>凉拌海带丝</li><li>泡椒风爪</li><li>韩式烤肉</li></ul><script>//点击每一道菜会打印出索引号//方法1.利用动态添加属性的方法(传统方法)var lis = document.querySelectorAll('li');for (var i = 0; i < lis.length; i++) {lis[i].index = i;lis[i].onclick = function() {alert(this.index);}}//方法2.利用闭包的方法for (var i = 0; i < lis.length; i++) {(function(i) {lis[i].onclick = function() {console.log(i);}})(i); //立即执行函数最后一个小括号用来传递参数,第一个小括号用来接收参数}</script>
</body>
  1. 案例2:3秒钟之后打印所有li元素的内容
<body><ul class="nav"><li>红烧茄子</li><li>凉拌海带丝</li><li>泡椒风爪</li><li>韩式烤肉</li></ul><script>//3秒钟之后打印所有li元素的内容var lis = document.querySelectorAll('li');for (var i = 0; i < lis.length; i++) {(function(i) {setTimeout(function() {console.log(lis[i].innerHTML);}, 3000)})(i);}</script>
</body>
  1. 案例3:计算打车价格(在3公里内打车起步价13,之后多一公里多5元,用户输入公里数就可以计算打车价格,若出现拥堵情况,总价格多收10元)
var car = (function() {var start = 13;var total = 0;return {price: function(n) {if (n <= 3) {total = start;} else {total = (n - 3) * 5 + start;}return total;},jam: function(n) {if (n = 0) {return total = total;} else {return total = total + 10;}}};
})();
car.price(5);
var money = car.jam(1);
console.log(money);

四. 思考

  1. 下列代码的返回值
var name = 'The Window';var object = {name: "My Object",getNameFunc: function() {that = this;return function() {return that.name;};}};
console.log(object.getNameFunc()());  //My Object
  1. 下列代码的返回值
var name = 'The Window';var object = {name: "My Object",getNameFunc: function() {return function() {return this.name;};}};
console.log(object.getNameFunc()());  //The Window

你做对了吗?

JavaScript闭包详解及案例相关推荐

  1. JavaScript 闭包详解

    2019独角兽企业重金招聘Python工程师标准>>> 闭包是什么? 闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(Function Clo ...

  2. JavaScript闭包详解

    文章出自个人博客https://knightyun.github.io/2018/05/31/js-closure,转载请申明 变量作用域 首先来了解一下Javascript中变量的作用域,除了常见的 ...

  3. JavaScript重难点解析4(作用域与作用域链、闭包详解)

    JavaScript重难点解析4(作用域与作用域链.闭包详解) 作用域与作用域链 作用域 作用域与执行上下文 作用域链 闭包 闭包理解 将函数作为另一个函数的返回值 将函数作为实参传递给另一个函数调用 ...

  4. Javascript 函数详解

    Javascript 函数详解 1)函数声明: 通过关键字function定义,把函数作为变量来声明 函数声明后不会立即执行,会在我们需要的时候调用到. <script>function ...

  5. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔 ...

  6. EMD算法之Hilbert-Huang Transform原理详解和案例分析

    目录 Hilbert-Huang Transform 希尔伯特-黄变换 Section I 人物简介 Section II Hilbert-Huang的应用领域 Section III Hilbert ...

  7. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  8. JavaScript事件详解-jQuery的事件实现(三)

    正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...

  9. DL之DilatedConvolutions:Dilated Convolutions(膨胀卷积/扩张卷积)算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之DilatedConvolutions:Dilated Convolutions(膨胀卷积/扩张卷积)算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 Dilated Con ...

最新文章

  1. 2017河北单招计算机试题,2017河北单招英语试题练习题
  2. 【BLE MIDI】MIDI 时间标志分析 ( 音符速度设置事件 | 拍号设置事件 | 基本时间 - 每个四分音符有多少 tick 或 pulse | 节拍时值计算 | 小节时值计算 )
  3. python调用函数示例_python 动态调用函数实例解析
  4. MySQL Innodb存储引擎使用B+树做索引的优点
  5. ListBox之随手放个控件
  6. python 通达信上传云端_Python读取通达信本地数据
  7. 大数据_Spark框架_快速上手_word count 案例-功能实现---Spark工作笔记0007
  8. 基于Taro开发小程序笔记--04路由跳转的几种方式
  9. 如何加入github开源项目!
  10. PHP openssl加密扩展使用总结
  11. E - 权势二进制 哈尔滨理工大学软件学院大一个人赛训练
  12. SQL中的5种常用的聚集函数
  13. Windows Server 2008 RemoteApp(五)---远程桌面Web访问
  14. [离线]ps4共享屏幕到笔记本
  15. js获取ip本机地址
  16. ubuntu 卸载anaconda
  17. Pr:音频和视频的同步
  18. WPS删除所有的页码
  19. 服务器托管费用怎么计算?
  20. 如何一键批量上传图片到指定图床,并返回 Markdown 链接?

热门文章

  1. 剖析大数据分析就业前景
  2. 计算机毕业设计ssm网上游戏商店设计
  3. 求一份DNF过三方。方法等谢谢(悬赏)
  4. 聊天机器人有了长期记忆,遇到不懂的还能上网搜索
  5. 二维数组正式讲+田忌赛马
  6. 百度渐堕利益深渊 关键字广告亟待规范(转载)
  7. 美国如何变成数学超级强国
  8. 三星S7短信不能提示的处理方法
  9. 免费物流轨迹查询 对接接口
  10. Postgres实现Merge