函数和函数的覆盖以及函数和变量的覆盖

函数和函数的覆盖以及函数和变量的覆盖

console.log(a);
var a=1;
console.log(a);
function a() {
console.log(2);
}
console.log(a);
var a=3;
console.log(a);
function a() {
console.log(4);
}
console.log(a);
a();

相关截图:

http://img1.sycdn.imooc.com//climg/601d27320970740f05300224.jpg

问题描述:

  1. 开始预处理的时候有两个function,运行结果显示的是后面的function是第二个function把第一个function覆盖了吗?

  2. 最后调用a();函数报错的原因是什么?第二次定义函数是在最后不能覆盖前面的变量a吗?

正在回答

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

1回答

同学你好,对于你的问题解答如下:

1、是的

2、因为预解析阶段,提升函数声明,在代码真正从上到下执行的时候会跳过函数的声明,执行var a = 1 和var a=3时,重新给a赋值为一个数字,此时的a并不是一个函数,所以调用的时候会报错,具体可以参考下图注释理解

http://img1.sycdn.imooc.com//climg/60e17cae091b6fa908660400.jpg

祝学习愉快~

  • 还是白雪公主老师和小猫咪老师描述的我看的懂一点,后两张图片大灰狼老师和海绵宝宝老师我完全看不懂啊

    http://img1.sycdn.imooc.com//climg/6034e52009be074c00000000.jpg

    http://img1.sycdn.imooc.com//climg/60a08da309fbb86c00000000.jpg

    http://img1.sycdn.imooc.com//climg/60d598e309e30e8e00000000.jpg


    2021-07-04 17:06:19
  • 同学你好,老师们的解答是没有问题的,只不过在语言描述上可能会有些不同,但是,同学不用担心,如果哪里没有看懂,存在疑问的,可以继续提问的,老师们都会认真的帮助同学们解决问题。

    祝学习愉快~

    2021-07-04 18:10:17
  • 嗯嗯,已经完全理解了呢,本题考察的是对变量和函数声明提升的理解

    本节知识点如下:1.变量和函数同名优先输出函数

                            2.同一个函数被多次定义时以最后被定义完的结果为准

                            3.函数可以被赋值改变成整形

                            4.变量遇见输出语句时不会全局查找以最后的赋值结果为准,而是以此语句前一次的结果为准

                            5.函数只定义没调用不能输出

                            6.变量往下运行时遇见函数定义直接跳过,因为函数没被调用,因为已经被预解析执行过了

                            7.最后函数调用报错,因为前一个赋值语句把a改成3了,所以不是函数就报错了,好在JS预解析机制,第一行名字为a的代码就把这个函数输出了

    老师我理解的对吗?

                            


    运行结果为:function a(){console.log(4)}

        ​    ​    ​    ​ 1

        ​    ​    ​    ​ 1

        ​    ​    ​    ​ 3

                     3

        ​    ​    ​    ​ 报错:函数调用语句无法调用变量

    2021-07-04 21:41:37
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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