首页 > Web开发 > 详细

在js中关于同名变量和函数的地位争夺问题

时间:2017-05-26 00:00:32      阅读:288      评论:0      收藏:0      [点我收藏+]

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

<!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行还早执行的代码吗?这里其实是预编译的结果,好神奇,对不对

在js中关于同名变量和函数的地位争夺问题

原文:http://www.cnblogs.com/theone67/p/6906421.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!