搜尋

首頁  >  問答  >  主體

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
给我你的怀抱给我你的怀抱2736 天前773

全部回覆(6)我來回復

  • 高洛峰

    高洛峰2017-06-26 10:55:22

    沒呼叫Foo的時候

    window.getName = function(){
        console.log(4);
    }
    

    呼叫Foo()的時候

    getName = function(){
                    console.log(1);
                };
    // 相当于更改了 window.getName

    調用後Foo裡面的return this的確指向window,所以最後結果是1.

    回覆
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-26 10:55:22

    雷雷

    回覆
    0
  • 黄舟

    黄舟2017-06-26 10:55:22

    Foo().getName(); 執行的是Foo中的getName

    回覆
    0
  • 阿神

    阿神2017-06-26 10:55:22

    雷雷 雷雷

    回覆
    0
  • 代言

    代言2017-06-26 10:55:22

    你console.log(Foo())看看,確定是window?

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-26 10:55:22

    Foo函數裡面的getName不是用var申明的,所以是全域的,所以當Foo運行時函數裡面的getName函數會覆蓋外面定義的

    回覆
    0
  • 取消回覆