解决方案 »

  1.   

    你没看到第二个 console.log("inner func: this.foo = " + this.foo); 是在内层中吗
      

  2.   

    第三个是一个自执行函数,在内层中没有foo的定义啊
      

  3.   

    var myObject = {  
    foo:"bar",  
    func: function() {  
    var self = this;  
    console.log("outer func: this.foo = " + this.foo);  
    console.log("outer func: self.foo = " + self.foo);  
       
     (function (){  
        console.log("zzzzz= " + (this==window));  
        console.log("inner func: self.foo = " + self.foo);  
     }());  
    }  
    }  
    myObject.func(); 
      

  4.   

    理所当然的,
    没人要的东西都属于top(这里是window).
      

  5.   

    a.b() 这个时候  b里面的this是 a( ‘里面’ 指顺序代码快  )
    b.apply(a)     b里面的this是a
    b.call(a)        b里面的this是ab()  这个时候  b里面的this 是window基本就这么个原则 在怎么变化也就是这样
      

  6.   

    function outer(){  
    this.i = 10;  
    alert(this.i);  
    (function(){  
    alert(this.i);  
    }());  
    };  
    outer();  
    你的这个调用的时候没new,没new的,都是this都是指向window,所以匿名函数里可以找到i。你new outer()就是undefined了、
      

  7.   

    var myObject = {  
    foo:"bar",  
    func: function() {  
    var self = this;  
    console.log("outer func: this.foo = " + this.foo);  
    console.log("outer func: self.foo = " + self.foo);   function aa(){
    console.log("inner func: this.foo = " + this.foo);  
    console.log("inner func: self.foo = " + self.foo);
    }

    //这个跟是不是匿名的自执行函数没有太大关系吧,而是跟function的内部this执向有关的。
    //function aa(){}这样的函数定义,内部的this默认都是指向window的,可以通过其他方式改变

    //所以下面的调用方法,this=window
    aa();

    //而下面的调用方法,则改变了this的指向
    aa.call(this); 
    }
    }
    myObject.func(); //例子:
    var name = "zhang";
    function getName(){
    console.log(this.name);
    }var obj = {
    name:"ling",
    getName:getName
    }getName();//zhang   直接调用,this=window
    getName.call(obj); //ling   使用call强行把getName内部的this指向objobj.getName();//ling   在obj上调用,指向this=obj//上面的这些,只是想要说明,this的指向,跟它的使用方法有关。
    //跟这个函数,定义在哪个区域无关。var age = 2;
    var MyAge = {
    age:1,
    getAge:function(){
    console.log(this.age);
    }
    }
    var newAge = MyAge.getAge;
    MyAge.getAge();       //1 this指向MyAge
    newAge();             //2 this指向window
    newAge.call(MyAge);   //1 this指向MyAge
      

  8.   

    你自己写的函数this指向是window!!!所以this.i就是window.i,在哪里都可以找到。
    this是据以执行的对象,就是谁调用的,你写个函数,在window中调用,this自然指向window,百度面试题是使用对象调用,this指向对象~
      

  9.   


    谢谢!也就是说像 function aa(){}这样定义、aa()这样调用的函数,不管在哪里定义、在哪里调用,都属于window调用对吧?
      

  10.   

    恩,看到了,是之前不知道像这样的定义调用方法this也是指向window。
      

  11.   


    差不多就是这样的,我现在还想不到什么特殊的,不符合的情况,
    function的函数,它的实质就属于引用类型的一种形式。var a = function (){
    console.log("a");
    }b = a;
    a();  //a
    b();  //a
    delete a;
    //这个时候,a和b都指向的同一个函数引用。
    a = function(){
    console.log("b");
    }//改变a的函数引用,但是b依然指向原来的函数
    a();  //b
    b();  //a//所以说,函数在被定义之后,就会一直存在,不管你是否引用。
      

  12.   


    恩,谢谢!
    不过最后这个结论好像不是这样。尽管之前delete了a,但因有b还指向被定义的函数,所以delete只是删除了a对它的引用,没有删除函数本身。后面又使a指向了新的函数,这时a和b是指向两个不同的函数了。若前面把a,b都delete了,可能函数就会被gc回收了。
      

  13.   

    额~~~竟然把delete带上了,这个不是要在这里说的,我当时想到了其他的东西,就拿来delete测试了一下,跟你这里的问题,无关的~~~函数是否会被回收,这个我也不太确定貌似匿名函数就不会被回收,还有就是应用了闭包的函数,就算丢失了引用,也不会被回收。