javascript - 关于JS函数实例化后的内部变量,为什么输出是undefined?

查看:233
本文介绍了javascript - 关于JS函数实例化后的内部变量,为什么输出是undefined?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var foo = 1;
function main() {
    console.log(foo);
    var foo = 2;
    console.log(this.foo);
    this.foo = 3;
}
new main();

为什么两个输出都是undefined


使用main()的时候,第二个输出是1,是有值的,现在实例化后,为什么就没有了?


解析:

  • 使用main()调用本函数时,main()函数内的第一个输出console.log(foo)的时候,第二行的var foo = 2对于foo的定义提升了,但是还没有赋值,所以输出是undefined
  • 第二个输出console.log(this.foo) 的时候,this.foo的环境变量是window,所以输出是1
  • 使用new main()实例化main()后,函数内的第一个输出console.log(foo)的时候,也是因为foo定义提升了,但是没有赋值,所以还是undefined
  • 第二个console.log(this.foo)为什么是undefined呢,原因在于使用new实例化后,this会指向当前对象,而main()函数内的this.foo=3赋值也是在console.log(this.foo)之后,所以也是undefined

    var foo = 1;
    function main() {
        console.log(foo); // undefined
        var foo = 2;
        console.log(foo); // 2
        console.log(this.foo); // undefined
        this.foo = 3;
        console.log(this.foo); // 3
    }
    new main();

解决方案

都是在函数赋值前输出,当然会输出undefind
你的代码相当于

var foo = 1;
function main() {
    var foo;
    console.log(foo);
    foo = 2;
    console.log(this.foo);
    this.foo = 3;
}
new main();

这篇关于javascript - 关于JS函数实例化后的内部变量,为什么输出是undefined?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆