• 从javascript的两个例子谈开


    今天是研究javascript的闭包问题,看到这么一个非常好的文章

    http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html?20110419152835

    文章最后留了两个题目:

    如果你能理解下面两段代码的运行结果,应该就算理解闭包的运行机制了。

    代码片段一。

    var name = "The Window";

    var object = {
    name : "My Object",

    getNameFunc : function(){
    return function(){
    return this.name;
    };

    }

    };

    alert(object.getNameFunc()());

    代码片段二。

    var name = "The Window";

    var object = {
    name : "My Object",

    getNameFunc : function(){
    var that = this;
    return function(){
    return that.name;
    };

    }

    };

    alert(object.getNameFunc()());

    这两个例子相当精简

    这里记录下对这两个例子的理解:

    理解最后两个例子:

    1 函数中的this指的是调用这个函数的owner
    2 object.getNameFunc()是返回一个函数,并没有执行函数中的代码
    3 增加一个例子0:
    var name = "The Window";
    var object = {
    name : "My Object",
    getNameFunc : function(){
    return (this.name);
    }
    };
    var name = object.getNameFunc();
    alert(name);

    4 把例子1变成
    var name = "The Window";
    var object = {
    name : "My Object",
    getNameFunc : function(){
    return function(){
    return this.name; //这个this是有上下文的限制的
    };
    }
    };
    var tmp = Object.getNameFunc(); //此时没有执行this.name
    var name = tmp();//这个时候才执行,这时候的this上下文为全局
    alert(name);
    //alert(object.getNameFunc()())

    5 把例子2变成:
    var name = "The Window";

    var object = {
    name : "My Object",

    getNameFunc : function(){
    var that = this;
    return function(){
    return that.name;
    };
    }
    };
    var tmp = Object.getNameFunc(); //这个时候执行了that = this,这里的this上下文是object,所以that指的是object
    var name = Object.getNameFunc(); //这个时候执行了that.name
    alert(name);
    //alert(object.getNameFunc()());

    这里面最难理解的应该是this的上下文

    实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 相关阅读:
    HDFS 常用命令
    CentOS6.5和RedHat6.5下以rpm方式安装mysql-5.6.20
    RedHat安装yum+配置国内yum源
    nginx 一般配置实例 静态页面
    PHP计划任务之关闭浏览器后仍然继续执行的函数 ignore_user_abort
    php函数——『解析 xml数据』
    基于php-fpm的配置详解[转载]
    解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误
    nginx的优化
    Nginx fastcgi_param解释
  • 原文地址:https://www.cnblogs.com/yjf512/p/2021018.html
Copyright © 2020-2023  润新知