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

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

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

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

http://img1.sycdn.imooc.com//climg/5ce3981b00014b7105530361.jpg

控制台打印结果

http://img1.sycdn.imooc.com//climg/5ce3982c0001220807040132.jpg


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

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

祝学习愉快~~

  • fangfangfang2019 提问者 #1
    我有看了一遍步骤一4-9节7:22处,老师说的都是预解析,是我之前没理解,谢谢!
    2019-05-21 14:32:07
FayeShieh 2019-05-21 12:00:47

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

http://img1.sycdn.imooc.com//climg/5ce3777b0001a48c06720655.jpg

FayeShieh 2019-05-21 11:05:39

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

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

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


  • 我好像搞错了,解析之前会吧所有带有var 和 function关键字的先声明。 所以应该是function name(){ } var t;//undefined var name; //undefined t = 1; name = "xiaoming"; 不知道这样理解对不对。请老师详答~
    2019-05-21 11:10:43
  • 提问者 fangfangfang2019 回复 FayeShieh #2
    老师讲的是变量和函数同名时,函数会覆盖变量啊
    2019-05-21 11:49:50
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师