zoukankan      html  css  js  c++  java
  • 面试题自我解析


    面试题:
     var foo=1;    
     function Foo() {
        alert(foo);
        var foo=2;
        alert(this.foo);
        this.foo=3;
     }
    
     var m1=Foo();
     var m2=new Foo();
    
     console.log(m1);
     console.log(m2); 

    这个执行分别是undefined,1,undefined,undefined;为什么呢?

    当执行到这句:

    var m1=Foo();

    函数已经执行,相当于下面这种形式:

     function Foo() {
      var foo; //预解析 alert(foo); //undefined;
    foo=2; alert(this.foo); //此时的函数在window下面调用相当于var m1 = window.Foo();所以this指向的是window,在window下有一个叫foo的属性,数值是1;所以弹出1; this.foo=3; }

    当执行到这句:

    var m2 = new Foo();

     函数已经执行,相当于下面这种形式:

     function Foo() {
      var foo;     //预解析
        alert(foo);  //undefined; 
        foo=2;
        alert(this.foo);   //undefined 当执行到这句话的时候,执行环境发生了改变,不再是全局域,在函数内部this还没有添加一个叫foo的属性,所以为undefined;
        this.foo=3;
     }

    注意:在var声明一个变量,函数声明,以及匿名声明会预解析。

    当执行到这句:

    console.log(m1);  //undefined     
    因为之前的var m1 = Foo();这个函数并没有返回值,即函数内部没有return一个数值,所以为undefined;

    当执行到这句:

    console.log(m2);  //  object
    之前的var m2 = new Foo(); m2是构造函数Foo的实例对象。

    我理解的是以上内容,欢迎补充拍板。
  • 相关阅读:
    java 基础中的字符串
    Java中的基本数据类型
    js 实现焦点图轮播效果和 jquery实现焦点图轮播效果
    Html中 value 和 name 属性的作用
    分别用js 和 html/css实现下拉菜单特效
    divide-conquer-combine(4.1 from the introduction to algorithm)
    1063. Set Similarity (25)
    1085. Perfect Sequence (25)
    1015. Reversible Primes (20)
    1057. Stack (30)
  • 原文地址:https://www.cnblogs.com/floatboy/p/interview_1.html
Copyright © 2011-2022 走看看