老师,我的结果跟你讲的不一样啊

来源:4-9 JS解析机制-预解析

fangfangfang2019

2019-05-20 23:38:38

http://img.mukewang.com/climg/5ce2c9d90001cae807960293.jpg

写回答

3回答

好帮手慕慕子

2019-05-21

同学你好, 可以参考“FayeShieh”最新的回答中的教辅理解哦。 函数名与变量名同名的时候, 预解析的时候, 函数会覆盖掉变量。

老师测试了一下同学的代码, 预解析的时候, name = undefined 解析到函数的时候, name变成了function name() {...}。 然后执行代码的时候,函数已经被提升到最前面。 代码从上到下执行, 遇到var name = "xiaoming"的时候, name被赋值为“xiaoming”

http://img.mukewang.com/climg/5ce3981b00014b7105530361.jpg

控制台打印结果

http://img.mukewang.com/climg/5ce3982c0001220807040132.jpg


这一块比较抽象不好理解, 同学可以结合教辅资料, 多听几遍视频,帮助自己更好的理解

如果帮助到了你, 欢迎采纳!

祝学习愉快~~

0
hangfangfang2019
h 我有看了一遍步骤一4-9节7:22处,老师说的都是预解析,是我之前没理解,谢谢!
h019-05-21
共1条回复

FayeShieh

2019-05-21

我又回去看了视频,老师确实说的,函数名和变量名同名时,变量会被干掉,就不存在了。然后我拷贝你的代码运行,配合教辅来看就比较清楚。不知道是我们理解有误还是老师口误。。。

http://img.mukewang.com/climg/5ce3777b0001a48c06720655.jpg

0

FayeShieh

2019-05-21

根据老师在解析机制里面讲的,函数与解析优先级要高于变量预解析,无论函数在什么地方申明,都会优先把整个函数提到最前面,所以这一段解析下来就是

function name(){
    ...
}
var t; // t = undefined
t = 1;
var name; // name = undefined
name = "xiaoming";

最后在调用name()的时候,因为后面的变量name已经把前面的函数name覆盖了, xiaoming已经赋值给name,最后出来的结果name是xiaoming,调用name会报错,name不是一个函数。


0
hangfangfang2019
回复
hayeShieh
h 老师讲的是变量和函数同名时,函数会覆盖变量啊
h019-05-21
共2条回复

0 学习 · 14456 问题

查看课程