首页  >  问答  >  正文

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

全部回复(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
  • 取消回复