题目很短,代码如下:
var param = 1;
function main(){
console.log(param);
var param = 2;
console.log(this.param);
this.param = 3;
}
main();
var m = new main();
打开chrome浏览器在控制台可以看到分别输出了: undefined,1,undefined,undefined.
小老弟不明白的是代码中的最后一句"var m = new main()"到底做了些什么,会导致多输出了连个"undefined"(输出结果前两个小老弟可以理解,后面两个理解不了),还望好心人教教小老弟,现行谢过了!
既然前两个你知道为什么,那直接说后两个。
当你执行
new main()
的时候,实际上是以 main 为构造函数创建一个对象。这个时候函数体内的 this 就不是 window 了,而是要生成的对象。如果你改成这样,在打印之前设置一个属性,就有输出了:
this.param
是设置对象属性,不是变量,所以不会变量提升。