`
zccst
  • 浏览: 3292283 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js-闭包(权威指南版)

阅读更多
作者:zccst

//1,闭包是词法作用域(作用域在定义时决定,不是在调用时决定)
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
};
var r = checkscope()();
console.log(r);//local scope


//2,闭包可以捕捉到单个函数调用的局部变量,并将这些局部变量用做私有状态。
var uniqueInteger = (function(){
                        var counter = 0;
                        return function(){
                            return counter++;
                        }
                    }());
//分析:这是一个嵌套的函数。当外部函数返回之后,其它任何代码都无法访问counter变量,只有内部的函数才能访问它。

//引申1:
function counter(){
    var n = 0;
    return {
        count:function(){return n++;},
        reset:function(){n=0;}
    };
}
var c = counter(), d = counter();
console.log(c.count());//0
console.log(d.count());//0
console.log(c.reset());
console.log(c.count());//0
console.log(d.count());//1
/*
批注:每次调用counter(),都会创建一个新的作用域链和一个新的私有变量。因此,如果调用counter()两次,则会得到两个计算器对象,而且彼此包含不同的私有变量,调用其中一个计数器对象的count()和reset()不会影响到另外一个对象。
*/


//引申2:
function counter(n){
    return {
        get count(){return n++;},
        set count(m){
            if(m >= n) n=m;
            else throw Error("只能越来越大,不能越来越小");
        }
    };
}
var c = counter(1000);
console.log(c.count);//1000
console.log(c.count);//1001
c.count = 2000;
console.log(c.count);//2000
c.count = 2000;//Error
/*
批注:这个版本并未声明局部变量,只是使用参数n来保存私有状态,属性存取器方法可以访问n,这样的话,调用counter()的函数就可以制定私有变量的初始值了。
*/


function constfuncs(){
    var funcs = [];
    for(var i= 0; i<10; i++){
        funcs[i] = function(){
            return i;
        };
    }
    return funcs;
}
var funcs = constfuncs();
console.log(funcs[5]());//10
/*批注,这些闭包都是在同一个函数调用中定义的,因此他们可以共享变量i。
所有的闭包都共享这一个值,因此数组中的函数的返回值都是同一个值,这不是我们想要的结果。
*/

//还有注意this的关键字,而不是变量。每个函数调用都包含一个this值,如果闭包在外部函数里是无法访问this的,除非外部函数将this转存为一个变量:
var self = this;//将this保存至一个变量中,以便嵌套的函数能够访问它。




如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论

相关推荐

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

    《JavaScript权威指南(第6版)》要讲述的内容涵盖JavaScript语言本身,以及web浏览器所实现的JavaScript API。本书第6版涵盖了 html5 和 ecmascript 5,很多章节完全重写,增加了当今 web 开发的最佳实践的内容,新增...

    JavaScript权威指南(高清第5版共604页中文版)

    前端开发必备JavaScript权威指南(高清第5版共604页中文版)第一部分关于函数的一章(第8章)进行了扩展,特别强调了嵌套的函数和闭包。新增了自定义类、名字空间、脚本化Java、嵌入JavaScript等内容。 第二部分最大...

    JavaScript权威指南(第6版)中文版pdf+源代码

     8.6 闭包182  8.7 函数属性、方法和构造函数188  8.8 函数式编程194  第9章 类和模块201  9.1 类和原型202  9.2 类和构造函数203  9.3 JavaScript中Java式的类继承207  9.4 类的扩充210  9.5 类和类型212 ...

    JavaScript权威指南(第5版)中文版(上)

    第5版在以下部分有所更新:  第一部分关于函数的一章(第8章)进行了扩展,特别强调了嵌套的函数和闭包。新增了自定义类、 名字空间、脚本化Java、嵌入JavaScript等内容。  第二部分最大的改变是增加了如下的...

    JavaScript权威指南(第5版)中文版(下)

    JavaScript权威指南(第5版)中文版(下) JavaScript权威指南(第5版)中文版 《JavaScript权威指南第4版》中文版出版至今已有三年多的时间。这本《JaVaScript权威指南》连续印刷5次,销售数十万册,成为很多JavaScript...

    JavaScript权威指南(第6版)

    《JavaScript权威指南(第6版)》主要讲述的内容涵盖JavaScript语言本身,以及Web浏览器所实现的JavaScript API。本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增...

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

    《JavaScript权威指南(第6版)》主要讲述的内容涵盖JavaScript语言本身,以及Web浏览器所实现的JavaScript API。本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增...

    JavaScript权威指南(第6版)(附源码)

    本书第6版涵盖了HTML5和ECMAScript5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增的章节包括jQuery、服务器端JavaScript、图形编程以及JavaScript式的面向对象。本书不仅适合初学者系统学习,也适合...

    JavaScript权威指南(第五版).rar

    《JavaScript权威指南第4版》中文版出版至今已有三年多的时间。这本《JaVaScript权威指南》连续印刷5次,销售数十万册,成为很多JavaScript学习者的必备宝典。由于其封面上是一只“爪哇犀牛”(封面上印上动物是原书...

    JavaScript权威指南(第6版)中文版pdf+源代码.zip

    第一部分关于函数的一章(第8章)进行了扩展,特别强调了嵌套的函数和闭包。新增了自定义类、名字空间、脚本化Java、嵌入JavaScript等内容。 第二部分最大的改变是增加了如下的大量新内容。包括第19章“cookie和...

    JavaScript权威指南(第六版) 清晰-完整

    OReilly精品图书系列:JavaScript权威指南(第6版) 作者简介  David Flanagan是一名程序员,也是一名作家,它的个人网站是 。他在O’Reilly出版的其他畅销书还包括《JavaScript Pocket Reference》、《The Ruby ...

    JavaScript权威指南(第6版)

    《JavaScript权威指南(第6版)》要讲述的内容涵盖JavaScript语言本身,以及web浏览器所实现的JavaScript API。本书第6版涵盖了 html5 和 ecmascript 5,很多章节完全重写,增加了当今 web 开发的最佳实践的内容,新增...

    JavaScript 权威指南(第四版).pdf

     8.6 闭包182  8.7 函数属性、方法和构造函数188  8.8 函数式编程194  第9章 类和模块201  9.1 类和原型202  9.2 类和构造函数203  9.3 JavaScript中Java式的类继承207  9.4 类的扩充210  9.5 类和类型212 ...

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

    《JavaScript权威指南(第6版)》要讲述的内容涵盖JavaScript语言本身,以及web浏览器所实现的JavaScript API。本书第6版涵盖了 html5 和 ecmascript 5,很多章节完全重写,增加了当今 web 开发的最佳实践的内容,新增...

Global site tag (gtag.js) - Google Analytics