在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  HTML/ 一個面試題中,關(guān)于函數(shù)方法的之間調(diào)用的問題?

一個面試題中,關(guān)于函數(shù)方法的之間調(diào)用的問題?

  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 不是直接調(diào)用嗎?

回答
編輯回答
糖豆豆

js的執(zhí)行順序
function foo() {} 定義全局變量foo
foo.a = function(){} 給全局變量foo的a屬性賦值
var obj = new foo();構(gòu)造函數(shù)調(diào)用foo
進(jìn)入foo函數(shù):
foo.a=function(){}給全局變量foo的a屬性覆蓋操作
this.a=function(){}因?yàn)橛昧薾ew關(guān)鍵字 this指向obj所以這句話是obj.a=...
下面兩句要一起看
a = function(){}本來這句沒有var是默認(rèn)全局變量
var a = function(){}但是這一句用了var導(dǎo)致變量聲明提前所以上面一句的a也變成了局部變量這一句覆蓋了a
所以歸根結(jié)底foo.a只執(zhí)行了兩次操作

2018年4月1日 12:10
編輯回答
空痕

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

那么foo.a() 就是 1 沒問題吧

2017年9月11日 00:49