zoukankan      html  css  js  c++  java
  • 《JavaScript设计模式与开发》笔记 5.关于正确写一个闭包

    1.如何正确使用闭包

    1.常用闭包

    var asd =(function(){
    var value = 0    //私有变量放入内存
    return function(){
       //biubiubiu 发射火箭
    }
    })();
    asd();

    2.一个引用引发的闭包问题

    var asdf = function(){
        var value = 0;
        return function(){
            //火箭升空
        }
    }
    var f = asdf(); //作为一个函数的引用引发闭包的问题

    //这样不是一个闭包

    var asdf = function(){
        var value = 0;
        return function(){
            //guang  爆炸了
        }
    }
    //作为一个函数的引用
    asdf()();
    asdf()();
    asdf()();

    3.对象

    var asdf = {
        a :0,
        call:function(){
            this.a++;
            console.log(this.a);
        }
    }
    asdf.call();   //输出1
    asdf.call();   //输出2
    asdf.call();   //输出3

    4.注意this指向问题

    错误写法:全都变成undefined

    var asdf = {
        a :0,
        call:function(){
            return function(){
                this.a++;
                console.log(this.a);
            }
        }
    }
    asdf.call()();   //输出1
    asdf.call()();   //输出2
    asdf.call()();   //输出3
    正确写法
    
    var asdf = {
        a :0,
        call:function(){
            that = this;
            return function(){
                that.a++;
                console.log(that.a);
            }
        }
    }
    asdf.call()();   //输出1
    asdf.call()();   //输出2
    asdf.call()();   //输出3

    5.基于事件驱动引发的闭包

    for(var i=0;i<arguments.length;i++){
        asdf.on某一个事件=function(){
                //里面也是一个闭包        
        }
    }
  • 相关阅读:
    用asp.net(C#)写的论坛
    javascript:window.history.go(1)什么意思啊?
    5个有趣的 JavaScript 代码片段
    marquee属性的使用说明
    flash网站欣赏
    获取验证码程序
    ACCESS中执行sql语句
    靠谱的工程师
    mysql变量(用户+系统)
    理解进程和线程
  • 原文地址:https://www.cnblogs.com/subtract/p/7139883.html
Copyright © 2011-2022 走看看