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

  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 不是直接调用吗?

阅读 2.1k
2 个回答

js的执行顺序
function foo() {} 定义全局变量foo
foo.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只执行了两次操作

在 new foo()中,foo.a 被改为了 console.log(1)

那么foo.a() 就是 1 没问题吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题