javaScript 函數(shù)
問(wèn)題描述
function Foo(){ getName = function(){console.log(1); }; return this;}var getName = function (){ console.log(4)}; Foo().getName();
上面的代碼為什么輸出的是1;
foo()運(yùn)行之后輸出了this,這個(gè)this是window對(duì)象,foo()中的getName是不是也就成了全局下的函數(shù)表達(dá)式;而下面的var getName也是一個(gè)函數(shù)表達(dá)式;為什么打印結(jié)果是1;
foo,執(zhí)行后它等同于于下面這個(gè)代碼么?
getName = function(){ console.log(1);};var getName = function (){ console.log(4)}; getName(); //4
問(wèn)題解答
回答1:沒(méi)調(diào)用Foo的時(shí)候
window.getName = function(){ console.log(4);}
調(diào)用Foo()的時(shí)候
getName = function(){console.log(1); };// 相當(dāng)于更改了 window.getName
調(diào)用后Foo里面的return this的確指向window,所以最后結(jié)果是1.
回答2:function Foo(){ getName = function(){console.log(1); }; return this;}//全局聲明一個(gè)變量getNamevar getName = function (){ console.log(4)};//重新賦值getName = function () { console.log(1)}//最終打印結(jié)果為1window.getName()回答3:
Foo().getName(); 執(zhí)行的是Foo中的getName
回答4:function Foo(){ getName = function(){console.log(1); }; return this;}var getName = function (){ console.log(4)};Foo().getName();
function Foo(){ getName = function(){console.log(1); }; return this;}var getName = function (){ console.log(4)};getName = function () { console.log(1)}window.getName()回答5:
你console.log(Foo())看看,確定是window?
回答6:Foo函數(shù)里面的getName不是用var申明的,所以是全局的,所以當(dāng)Foo運(yùn)行時(shí)函數(shù)里面的getName函數(shù)會(huì)覆蓋外面定義的
相關(guān)文章:
1. 我在導(dǎo)入模板資源時(shí)遇到無(wú)法顯示的問(wèn)題,請(qǐng)老師解答下2. macos - 無(wú)法source activate python273. 運(yùn)行python程序時(shí)出現(xiàn)“應(yīng)用程序發(fā)生異常”的內(nèi)存錯(cuò)誤?4. thinkphp6使用驗(yàn)證器 信息如何輸出到前端頁(yè)面5. PHPExcel表格導(dǎo)入數(shù)據(jù)庫(kù)怎么導(dǎo)入6. css - 移動(dòng)端 盒子內(nèi)加overflow-y:scroll后 字體會(huì)變大7. javascript - h5微信中怎么禁止橫屏8. python - sqlalchemy更新數(shù)據(jù)報(bào)錯(cuò)9. html - 網(wǎng)頁(yè)的a標(biāo)簽到底要不要寫(xiě)上域名?10. html5 - 前端面試碰到了一個(gè)緩存數(shù)據(jù)的問(wèn)題,來(lái)論壇上請(qǐng)教一下

網(wǎng)公網(wǎng)安備