zoukankan      html  css  js  c++  java
  • 在js中关于同名变量和函数的地位争夺问题

    先上一段让大家比较蒙圈的代码,接下来再慢慢讲解

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
    <script type="text/javascript">
    console.log(foo);
    var foo = 1;
    console.log(foo);
    function foo () {
    }
    console.log(foo);
    </script>
    </body>
    
    
    </html>

    其实,在浏览器解析js代码的过程中,会有一个预编译的过程,遇到function 函数定义的部分,会先将该部分的代码提前,所以我们在第一个console.log(foo)中,会打印出function foo(){},第二个和第三个foo被变为1,所以会打出来1

    我们如果将var变成let,大家应该能想到会报错,ES6规定let定义的变量不需要重复定义,但是聪明的你知道是哪里报的错吗

    竟然是第一行报错了,它竟然还显示foo已经被定义了!真是岂有此理,竟然还有比第1行还早执行的代码吗?这里其实是预编译的结果,好神奇,对不对

  • 相关阅读:
    _I、_O、_IO的含义
    ARM启动代码中_main 与用户主程序main()的区别
    ARM汇编程序中的伪指令
    oracle密码过期问题
    等待界面-调转页面前button篇
    等待效果
    winfrom中Application.Restart()
    自动刷新处理
    泛微E8二次开发
    我的菜园子
  • 原文地址:https://www.cnblogs.com/theone67/p/6906421.html
Copyright © 2011-2022 走看看