js-闭包(权威指南版)

js-闭包(权威指南版)

博客分类:

JavaScript

作者:zccst

Js代码  

    1. //1,闭包是词法作用域(作用域在定义时决定,不是在调用时决定)
    2. var scope = "global scope";
    3. function checkscope(){
    4. var scope = "local scope";
    5. function f(){
    6. return scope;
    7. }
    8. return f;
    9. };
    10. var r = checkscope()();
    11. console.log(r);//local scope
    12. //2,闭包可以捕捉到单个函数调用的局部变量,并将这些局部变量用做私有状态。
    13. var uniqueInteger = (function(){
    14. var counter = 0;
    15. return function(){
    16. return counter++;
    17. }
    18. }());
    19. //分析:这是一个嵌套的函数。当外部函数返回之后,其它任何代码都无法访问counter变量,只有内部的函数才能访问它。
    20. //引申1:
    21. function counter(){
    22. var n = 0;
    23. return {
    24. count:function(){return n++;},
    25. reset:function(){n=0;}
    26. };
    27. }
    28. var c = counter(), d = counter();
    29. console.log(c.count());//0
    30. console.log(d.count());//0
    31. console.log(c.reset());
    32. console.log(c.count());//0
    33. console.log(d.count());//1
    34. /*
    35. 批注:每次调用counter(),都会创建一个新的作用域链和一个新的私有变量。因此,如果调用counter()两次,则会得到两个计算器对象,而且彼此包含不同的私有变量,调用其中一个计数器对象的count()和reset()不会影响到另外一个对象。
    36. */
    37. //引申2:
    38. function counter(n){
    39. return {
    40. get count(){return n++;},
    41. set count(m){
    42. if(m >= n) n=m;
    43. else throw Error("只能越来越大,不能越来越小");
    44. }
    45. };
    46. }
    47. var c = counter(1000);
    48. console.log(c.count);//1000
    49. console.log(c.count);//1001
    50. c.count = 2000;
    51. console.log(c.count);//2000
    52. c.count = 2000;//Error
    53. /*
    54. 批注:这个版本并未声明局部变量,只是使用参数n来保存私有状态,属性存取器方法可以访问n,这样的话,调用counter()的函数就可以制定私有变量的初始值了。
    55. */
    56. function constfuncs(){
    57. var funcs = [];
    58. for(var i= 0; i<10; i++){
    59. funcs[i] = function(){
    60. return i;
    61. };
    62. }
    63. return funcs;
    64. }
    65. var funcs = constfuncs();
    66. console.log(funcs[5]());//10
    67. /*批注,这些闭包都是在同一个函数调用中定义的,因此他们可以共享变量i。
    68. 所有的闭包都共享这一个值,因此数组中的函数的返回值都是同一个值,这不是我们想要的结果。
    69. */
    70. //还有注意this的关键字,而不是变量。每个函数调用都包含一个this值,如果闭包在外部函数里是无法访问this的,除非外部函数将this转存为一个变量:
    71. var self = this;//将this保存至一个变量中,以便嵌套的函数能够访问它。
时间: 2024-10-24 07:50:56

js-闭包(权威指南版)的相关文章

《javascript权威指南》读书笔记——第二篇

<javascript权威指南>读书笔记--第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字符集 JavaScript程序是用Unicode字符集编写. Unicode是ASCII和Latin-1的超集,支持几乎所有语言. ES3 要求支持Unicode 2.1及后续版本 ES5 要求支持Unicode 3及后续版本 2.1.1 区分大小写 JavaScript是区分大小写的. HTML 并不区分大

《javascript权威指南》读书笔记——第一篇

<javascript权威指南>读书笔记--第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本书来补充下. 今天是今年的196天,由于我之前承诺过,每天分享读书笔记,只是之前分享的是大众读物,所以随手分享到kindle阅读群里了.但是现在读的是技术类书籍,分享到kindle读书群不太合适,所以还是以博客的形式分享.这样子,一个链接,大家感兴趣了就点开看看,不感兴趣了,就不点开. 其实这篇文章应该是昨天

《JavaScript权威指南》学习——js闭包

序:闭包这个玩意啊~在很多没有代码块的语言中都会出现,已经成为大多程序员入门的一道坎,闭包让很多程序员觉得晦涩(事实上百度一下这个名词,真的说的很晦涩啊亲==|||),本座第一次知道闭包这个名词是从<JavaScript权威指南>中读到的,当时还是2015年的3月份,我刚开始看寒假购买的书,话说那时我还没有和初恋分手,我清楚的记得我在从徐州回苏州的火车上全程研究这本<JavaScript权威指南>的屌丝场景(异地恋),前女友说这本书封面上的犀牛丑死了,我说"你懂啥!&qu

javascript权威指南第6版学习笔记

javascript权威指南第6版学习笔记 javascript数组.函数是特殊对象 看一点少一点. 3.1.4 hello.js内容是 var x=.3-.2;var y=.2-.1 console.log(x==y);console.log(x==.1);console.log(y==.1); 控制台输出结果: 3.1.5 var now = new Date();console.log(now); 3.2 文本 Javascript没有字符型,只有字符串. 16位怎么理解 3.10 变量作

《JavaScript权威指南(第6版)(中文版)》PDF

简介自1996年以来,JavaScript的:权威指南已为JavaScript圣经程序员,程序员指南和全面的参考,以核心语言和客户端JavaScript API的Web浏览器定义.第6版包括HTML5和ECMAScript 5,与jQuery和服务器端JavaScript新的篇章.这是推荐谁想要学习的Web编程语言经验的程序员,以及当前的JavaScript程序员谁想要掌握它. 封面   目录<javascript权威指南(第6版)> 前言 1 第1章 javascript概述 5 1.1 j

【vue.js权威指南】读书笔记(第一章)

最近在读新书<vue.js权威指南>,一边读,一边把笔记整理下来,方便自己以后温故知新,也希望能把自己的读书心得分享给大家. [第1章:遇见vue.js] vue.js是什么? vue.js不是一个框架-它只聚焦视图层,是一个用来构建数据驱动的Web界面的库.Vue.js通过简单的API来提供高校的数据绑定和灵活的组件系统 vue.js的特性 轻量级:体积非常小,而且不依赖其他基础库 数据绑定:对于一些富交互,状态机类似的前端UI界面,数据绑定非常简单,方便 指令:类似与AJ,可以使用v-*的

【文章内容来自《Android 应用程序开发权威指南》(第四版)】如何设计兼容的用户界面的一些建议(有删改)

最近一直在看的一本书是<Android 应用程序开发权威指南>(第四版),十分推荐.书中讲到了一些用户界面设计的规范,对于初学者我认为十分有必要,在这里码给大家,希望对我们都有用. 在我们设计用户界面的时候,我们总是很多时候通过提供自定义应用资源和代码的方法来支持特定设备配置,但有一点特别需要注意的,那就是我们必须保证我们的设计方案有足够的灵活性来应对各种变化,让他们变得简单,而不是过度的挤压他们,一下是我的一些建议: 设计正常尺寸屏幕和中等分辨率的app.随着时间的推移,设备有着向更大尺寸,

[hadoop]hadoop权威指南例第二版3-1、3-2

hadoop版本1.2.1 jdk1.7.0 例3-1.通过URLStreamHandler实例以标准输出方式显示Hadoop文件系统的文件 hadoop fs -mkdir input 在本地创建两个文件file1,file2,file1的内容为hello world,file2内容为hello Hadoop,然后上传到input,具体方法如Hadoop集群(第6期)_WordCount运行详解中 2.1.准备工作可以看到. 完整代码如下: 1 import org.apache.hadoop

JavaScript权威指南(第6版)(中文版)笔记

? JavaScript权威指南(第6版)(中文版)笔记 ? ? ?