javaScript 函數
問題描述
function Foo(){ getName = function(){console.log(1); }; return this;}var getName = function (){ console.log(4)}; Foo().getName();
上面的代碼為什么輸出的是1;
foo()運行之后輸出了this,這個this是window對象,foo()中的getName是不是也就成了全局下的函數表達式;而下面的var getName也是一個函數表達式;為什么打印結果是1;
foo,執行后它等同于于下面這個代碼么?
getName = function(){ console.log(1);};var getName = function (){ console.log(4)}; getName(); //4
問題解答
回答1:沒調用Foo的時候
window.getName = function(){ console.log(4);}
調用Foo()的時候
getName = function(){console.log(1); };// 相當于更改了 window.getName
調用后Foo里面的return this的確指向window,所以最后結果是1.
回答2:function Foo(){ getName = function(){console.log(1); }; return this;}//全局聲明一個變量getNamevar getName = function (){ console.log(4)};//重新賦值getName = function () { console.log(1)}//最終打印結果為1window.getName()回答3:
Foo().getName(); 執行的是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函數里面的getName不是用var申明的,所以是全局的,所以當Foo運行時函數里面的getName函數會覆蓋外面定義的
相關文章:
1. Docker for Mac 創建的dnsmasq容器連不上/不工作的問題2. html5 - 這個代碼顯示功能如何實現?3. java - 一段遞歸代碼的問題4. java - instance method中 static后的<K>是什么意思?5. node.js - npm 非管理員權限 全局安裝問題6. java - 關于File的問題?7. python3.x - python連oanda的模擬交易api獲取json問題第五問8. javascript - QWebEngineView 如何爬 angular 的動態數據?9. node.js - 終端 遠程連接服務器,終端關閉后,服務器無法運行10. docker - 如何修改運行中容器的配置
