为了账号安全,请及时绑定邮箱和手机立即绑定

老师问下<不好意思视频出了这么久我还提问>  构造函数的属性《例如 this.name是怎么预编译的》?

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

正在回答

3 回答

剖析仅使用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()被提前的.....

0 回复 有任何疑惑可以回复我~

谢了   ,我想问的是使用new时  this.foo是怎么预编译的?按控制台的答案是另外初始化了一个变量?

0 回复 有任何疑惑可以回复我~

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,这是我自己的理解,希望对你有帮助,有错误望老师纠正~

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师问下<不好意思视频出了这么久我还提问>  构造函数的属性《例如 this.name是怎么预编译的》?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信