javaScript 函數(shù)
問題描述
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
問題解答
回答1:沒調(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. html5和Flash對(duì)抗是什么情況?2. 數(shù)據(jù)庫 - Mysql的存儲(chǔ)過程真的是個(gè)坑!求助下面的存儲(chǔ)過程哪里錯(cuò)啦,實(shí)在是找不到哪里的問題了。3. ios - 類似微博首頁,一張圖的時(shí)候是如何確定圖大小的?4. MySQL主鍵沖突時(shí)的更新操作和替換操作在功能上有什么差別(如圖)5. javascript - 在ie下為什么會(huì)出現(xiàn)這種情況呢 《 無法獲取未定義或 null 引用的屬性“l(fā)ength”》 ?請大神指教。6. javascript - 我是做web前端的,公司最近有一個(gè)項(xiàng)目關(guān)于數(shù)據(jù)統(tǒng)計(jì)的!7. javascript - 如何使用loadash對(duì)[object,object,object]形式的數(shù)組進(jìn)行比較8. css右浮動(dòng)字的順序顛倒了9. javascript - vue過渡效果 css過渡 類名的先后順序10. javascript - vuejs+elementui 購物車價(jià)格計(jì)算,點(diǎn)擊加減號(hào)修改數(shù)量總價(jià)都不會(huì)改變,但是計(jì)算執(zhí)行了
