zoukankan      html  css  js  c++  java
  • 一道闭包的题

    var name="window";
    var obj={
            name:'obj',
            children:{
                name:'children',
                logName:function(){
                        alert(this.name)
                    }
            }
        }
    var logName=obj.children.logName;
    logName();

    问:

    1.alert什么?

    答:window。

    2.修改obj的实现,怎么能alert:children

    试着解答

    var name="window";
     var obj={
            name:'obj',
            children:{
                name:'children',
                logName :(function(scope){//改了这里,弄了个闭包加进去了个作用域
                    return function(){
                        alert(scope.name)
                    }
                    
                })(obj.children)
            }
        }
    var logName=obj.children.logName;
    logName();

    这样会报错

    var name="window";
    var obj={};//改了这里,把obj先定义了
    obj={ name:'obj', children:{ name:'children', logName :(function(scope){ return function(){ alert(scope.name) } })(obj.children) } } var logName=obj.children.logName; logName();

    改成了这样,但是会报错

    感觉貌似是因为对象还没定义完???

    反正后来我改成这样好使了

    var name="window";
    var obj={
            name:'obj',
            children:{
                name:'children'
            }
        }
        obj.children.logName=(function(scope){//改了这里,把那个作用域在定义完再传进去
            return function(){
                        alert(scope.name)
                    }
        })(obj.children)
    var logName=obj.children.logName;
    logName();

     再加一个

    function child(){
        this.name='children';
        this.logName=(function(self){
            return function(){
                console.log(self.name)
            }
            
        })(this);
    }
    var logName=new child().logName;
    logName();

    传this就不会出现没有定义完的问题

  • 相关阅读:
    .net正在终止线程异常
    js判断客户浏览器类型,版本
    C#中ToString格式大全
    WPF TextBox 搜索框 自定义
    C#:获取设备电量相关信息
    C#中的委托与事件并存的理由
    WPF中的Pack URI
    SQLServer中的数据库备份和还原
    使用Aspose.Cells读取Excel
    SQLServer存储过程事务用法
  • 原文地址:https://www.cnblogs.com/zqiong/p/6184661.html
Copyright © 2011-2022 走看看