javascript - 声明前后的JavaScript变量?
问题描述
function a(){
console.log(typeof b); // function
function b() {
var c = 52;
console.log(c);
}
var b = 88;
console.log(typeof b); // number
}
谁能回答,javaScript如何编译或处理这种特殊情况?我知道 javaScriptfunction
在hoisting
. 但是相同的如何identifier
b
在相同的块或相同的词法范围内保存两个不同的值?
有人可能会说,好吧,我将在它声明之前和分配它之后使用b
a 。function
number
number
解决方案
您可以这样理解代码执行有两个阶段
Creation phase
Execution phase
创建阶段:-在创建阶段,函数按原样提升在顶部,而变量被提升但没有分配给它的值(或者你可以说它的值是未定义的)
执行阶段:-在执行上下文中,当变量到达发生赋值的行时,它为变量赋值
所以在creation phase
函数 b 被提升期间你的代码中,编译器会像这样读取它
function a(){
function b(){
var c = 52;
console.log(c);
}
console.log(typeof b); // function
b = 88;
console.log(typeof b); // number
}
所以当你到达终点线时
b = 88
b
它为类型的变量分配一个新值number
推荐阅读
- python - 从数据框中删除不包含特定长度字符串的行
- android - 为什么我会在发布前报告中收到这些 Android 兼容性警告?
- postgresql - 如何在 PostgreSQL 服务器端 C 函数中为数据库 NULL 创建数据?
- spring-boot - 应用程序无法使用 Spring 配置服务器启动
- react-native - 检测是否在 Expo 上运行 react-native 项目
- python - 如何将数值列转换为分类?
- android - 滚动 ReyclerView 时隐藏操作栏 [Android Studio]
- selenium-webdriver - 无法通过右键单击 Internet Explorer 11 版本的弹出窗口来检查元素
- css - 字体在 Windows 上不工作,但在 Mac 和 iPhone 上
- javascript - Google Pay 是否支持将资金转入 PayPal 帐户?