zoukankan      html  css  js  c++  java
  • js变量和函数提升的小结

    对于变量和函数一起的提升说法,我比较认同"LittleBear"的说法。

    比如:

    <script>
         console.log(a)//function a(){}
         var a=1;
         console.log(a)//1
         function a(){}
         console.log(a)//1
    </script>
    

    他觉得,是先预编译变量,先给a赋值undefined,后来预编译函数,函数a覆盖了之前的变量a的默认值; 然后代码顺序执行到a=1;,这个时候赋值表达式给a赋值为1,所以后面输出都是1。  

    我觉得,在同一作用域中,变量和函数声明的提升顺序和"天天向上中"提到的一样:【函数形参声明--->函数声明---->变量声明 。任何一种声明,如果在前面出现,都不会再次声明。】

    这个提升顺序和代码的先后顺序没关系。也就是,不管var a=1在function a(){}前面或者后面,都按照上面说的顺序来提升。

    再比如下面的代码:(各位可参考上面的逻辑,自行解决[考的正是作用域内变量和函数声明的提升顺序])

    a()
    var a = c = function() {
        console.log(2)
    }
    a()
    
    function a() {
        console.log(1)
    }
    a();
    (function(b) {
        b(), c()
        var b = c = function a() {
            console.log(3)
        }
        b()
    })(a)
    c()
    

      

    参考文章:

    [转]谈谈我遇到的前端的一些神奇面试题--变量提升,函数提升

  • 相关阅读:
    C++学习网址
    python学习网址
    python之raw_input()函数
    APP营销模式
    计划任务
    多线程
    Spring Aware
    事件(Application Event)
    Spring 的AOP
    Java配置
  • 原文地址:https://www.cnblogs.com/simonbaker/p/4238002.html
Copyright © 2011-2022 走看看