行云流水justdoit
2016-09-11 11:20
var foo = 1;
function main (){ console.log(foo); var foo = 2; function foo (){ console.log(foo); } console.log(this.foo); this.foo = 3; console.log(this.foo); }
main();
new main();
剖析仅使用new main();的情况:
代码运行前首先创建全局上下文环境(按照课程说明先查询函数后查询变量)
[global] = { main:function, foo:undefined this:window }
运行时从上到下执行赋值语句:
[global] = { main:function, foo:1 this:window }
跳过main函数中的内容直接执行到new main();代码运行前首先创建函数上下文环境
[main] = { foo = function this:new Object() }
由于var foo...与function foo()...同名,根据课程所述忽略变量foo
运行时从上到下执行赋值语句:
[main] = { foo:2 this:new Object() }
由于this中没有属性foo,console.log(this.foo)自然为undefined。若有误,望指正。
我不清楚楼上怎么理解为function foo()被提前的.....
谢了 ,我想问的是使用new时 this.foo是怎么预编译的?按控制台的答案是另外初始化了一个变量?
var foo = 1;
function main (){
console.log(foo); // function foo ()
var foo = 2;
function foo (){
console.log(foo);
}
console.log(this.foo); // main();时为1 new main();时为undefined
this.foo = 3;
console.log(this.foo); // 3
}
main();
new main();
当用new来构造函数时,this的指向是 new main()的原型main();,this.foo就是main()中的function foo(),而变量申明var foo = 2;因为和function foo()重复,就会被忽略,在执行上下文时function foo ()会被提前,值暂时为undefined,所以console.log(this.foo);会返回undefined,这是我自己的理解,希望对你有帮助,有错误望老师纠正~
JavaScript深入浅出
281098 学习 · 1054 问题
相似问题