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
阅读 3.6k
6 个回答

没调用Foo的时候

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

调用Foo()的时候

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

调用后Foo里面的return this的确指向window,所以最后结果是1.

function Foo(){
    getName = function(){
        console.log(1);
    };
    return this;
}
//全局声明一个变量getName
var getName = function (){ 
    console.log(4)
};
//重新赋值
getName = function () {
    console.log(1)
}
//最终打印结果为1
window.getName()

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

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()

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

Foo函数里面的getName不是用var申明的,所以是全局的,所以当Foo运行时函数里面的getName函数会覆盖外面定义的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题