javascript - 函数实际上是否在变量之前首先被提升?
问题描述
有人在 Discord 上给我发了这张照片,说函数首先被提升,然后是变量。
prnt .sc/xdwc9a (请删除点前的空格,我不想发垃圾邮件)
他的陈述似乎是正确的,因为正在调用该函数而没有引发任何错误。
Kyle Simpson 在他的 YDKJS 书中也说了同样的话:
- bit .ly/39Wolka
但是,当我尝试它时,我没有得到我所期望的。记录器() // 10
function logger(){
var x = 10;
function x(){
console.log('Function code')
}
function x(){
console.log("more code")
}
console.log(x)
}
这将返回 10,但是由于首先提升了函数,因此应该提升 x 函数,并且在尝试提升 var x; 时在第二次提升(提升变量)中运行 它应该忽略它,因为函数 x 已经被提升了,但看起来这不是这里发生的事情!
我错过了什么吗?
解决方案
变量和函数一样首先被提升。但是当变量首先被提升时,它们的值是undefined
. 另一方面,函数声明(不是表达式或 IIFE)的内容会被提升。
这是来自MDN的吊装。
推荐阅读
- flutter - 如何在 Flutter 应用中设置前台通知?
- c - 在 c 中使用 malloc 时的自由变量
- javascript - 使用 aframe 在 VR 中动态设置子弹模板的旋转
- javascript - Node.js 如何根据 SQL 查询结果发送 http 响应(在回调中处理异常)
- python - 在python中写入数据以向i2c注册
- python - Seaborn,matplotlib 不承认时间为时间
- java - 对注解进行类型转换——它是如何/为什么起作用的?
- optaplanner - Optaplanner:防止自定义列表被 FieldAccessingSolutionCloner 克隆
- performance - 从 Hibernate 3 迁移到 Hibernate 5 时的严重性能影响
- php - 当“跳过”主键编号或在键之间添加另一个学生时,Laravel hasmanythrough 模型将行放置在错误的父级中