JS中的return與this
this

我們要打印fun fun()和 new fun()
此時對應(yīng)的結(jié)果應(yīng)該為函數(shù)體 return返回值 和 fun{ xxx:'1231321'}
一般來說打印函數(shù)不帶括號是不執(zhí)行函數(shù)的內(nèi)容的.
其中如果不加new fun() this指向window 加了之后this指向new的對象本身

第一個Foo.getName()直接對號入座 打印2
第二個getName() 我們發(fā)現(xiàn)有一個變量聲明 和一個函數(shù)聲明 此時由于提升 變量的優(yōu)先級要大于函數(shù) 打印4
第三個先執(zhí)行Foo()后返回this,這時this指向window 也就是window.getName()打印輸出1
第四個再次使用getName(),由于第三個改變了全局的getName() 所以輸出結(jié)果和第三個一樣
如果我們要執(zhí)行new Foo().getName()通過原型查找機制,先在自身找,沒有找到=>到構(gòu)造函數(shù)Foo()中去找,由于Foo()中的getName指向window ,沒有加this,所以構(gòu)造函數(shù)也沒有=>到自身原型去找沒有=> 到構(gòu)造函數(shù)原型的Foo.prototype.getName找到了 打印輸出3

o.b.fn()=>fn里面兩個打印輸出 一個是this.a 一個是this指向誰=>fn是b中的,所以this指向b,b中的a是2.如果b中沒有a的話,由于this的存在,a不會去找o中的a,結(jié)果為undefined.

let a=new A() 由于new操作符 a現(xiàn)在是對象A{name:123}
然后輸a.getA,在a中沒有找到getA方法,到構(gòu)造函數(shù)中去找也沒有,到原型中去找到了
于是打印this,這時候的this指向全局window

對于obj,test1() 函數(shù)中調(diào)用函數(shù)是一個閉包的過程 this指向window 為11
而obj.test2() this指向obj 為6