• 一道闭包的题


    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就不会出现没有定义完的问题

  • 相关阅读:
    树分治 poj 1741
    堆 poj 2010
    堆 poj 2442
    堆的基本操作
    状态压缩codeforces 11 D
    状态压缩 CSU1129 送货到家
    炮兵阵地 POJ 1185
    状态压缩 HDU4539 郑厂长系列故事——排兵布阵
    状态压缩 HDU 3182
    android手势创建及识别
  • 原文地址:https://www.cnblogs.com/zqiong/p/6184661.html
Copyright © 2020-2023  润新知