javascript - 关于JS函数实例化后的内部变量,为什么输出是undefined?
本文介绍了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屋!
查看全文