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. 在應(yīng)用配置文件 app.php 中找不到’route_check_cache’配置項(xiàng)2. html按鍵開關(guān)如何提交我想需要的值到數(shù)據(jù)庫(kù)3. HTML 5輸入框只能輸入漢字、字母、數(shù)字、標(biāo)點(diǎn)符號(hào)?正則如何寫?4. javascript - 請(qǐng)教如何獲取百度貼吧新增的兩個(gè)加密參數(shù)5. gvim - 誰(shuí)有vim里CSS的Indent文件, 能縮進(jìn)@media里面的6. 跟著課件一模一樣的操作使用tp6,出現(xiàn)了錯(cuò)誤7. PHP類屬性聲明?8. javascript - JS請(qǐng)求報(bào)錯(cuò):Unexpected token T in JSON at position 09. objective-c - ios 怎么實(shí)現(xiàn)微信聯(lián)系列表 最好是swift10. java - 安卓接入微信登錄,onCreate不會(huì)執(zhí)行
