猿问

一个面试题中,关于函数方法的之间调用的问题?

  function foo() {

      foo.a=function(){

        console.log(1)

      }


      this.a=function(){

        console.log(2)

      }


      a=function () {

        console.log(3)

      }


      var a = function(){

        console.log(4)

      }

  }


  foo.a=function(){

    console.log(6)

  }


  var obj = new foo();

  foo.a()  

  

//为什么是1 不是直接调用吗?

跃然一笑
浏览 1139回答 2
2回答

qq_花开花谢_0

js的执行顺序function foo() {} 定义全局变量foofoo.a = function(){} 给全局变量foo的a属性赋值var obj = new foo();构造函数调用foo进入foo函数:foo.a=function(){}给全局变量foo的a属性覆盖操作this.a=function(){}因为用了new关键字 this指向obj所以这句话是obj.a=...下面两句要一起看a = function(){}本来这句没有var是默认全局变量var a = function(){}但是这一句用了var导致变量声明提前所以上面一句的a也变成了局部变量这一句覆盖了a所以归根结底foo.a只执行了两次操作
随时随地看视频慕课网APP
我要回答