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的实例对象。

    我理解的是以上内容,欢迎补充拍板。
  • 相关阅读:
    AJAX以及XMLHttpRequest
    理解Promise对象
    HTTP报文整理
    前端 — URL、URI、URN概念和区别整理,以及URL语法规则
    gulp与webpack的区别
    Sass和less的区别是什么?用哪个好
    Vue3.0 && Vue3.0初体验 一
    Promise入门详解和基本用法
    js对象方法大全
    hash模式和history模式 实现原理及区别
  • 原文地址:https://www.cnblogs.com/floatboy/p/interview_1.html
Copyright © 2011-2022 走看看