JS变量函数提升机制

看了大佬的博客JavaScript引擎运行原理解析,对其中的代码段产生好奇。

        <script>
            console.log(a); // 打印[Function: a]
            var a = 1;
            function a(){console.log(2);}
            console.log(a);
            var a = 3;
            console.log(a);
            function a(){console.log(4);}
            console.log(a)
        </script>
————————————————
版权声明:本文为CSDN博主「开心大表哥」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a419419/article/details/82906049

从结果脑补JS引擎的机制。。。

  1. JS的函数声明 应该是 函数声明(像C里面的函数声明: [返回值类型] [函数名](参数列表);)+ 函数体。为什么说这个呢,函数不像变量有声明和赋值两步走,我觉得JS里函数就是一体的,没得像先声明个函数名字再定义函数代码的,如果这样,那就不叫函数声明了,直接是函数表达式不好莫。为什么是应该是呢,因为我不知道官方文档在哪。。。

  2. 函数声明和变量提升后的顺序:猜测1——函数前变量后;猜测2——变量前函数后;猜测3——会不会分别放在两个地方啊。。。我还没找到官方文档,这个跟JS引擎的实现有关吧。。。不管了,不影响我下面的猜测。。。

  3. 函数与变量同名(就叫小明吧)时,只要变量未赋值,小明(的类型)就还是函数,一旦变量赋值,小明(的类型)就根据所赋的值变化了。也就是说变量赋值操作重写了小明里面的东西。

猜想原理可能是如下酱紫的。。。

害。。。我先记录一下,帮助自己理解。。。我猜应该没人看到。。。如果不小心看到了,请宁不要太当真啦

猜你喜欢

转载自www.cnblogs.com/xw172854/p/12424348.html
今日推荐