js预解析-变量/函数声明提升
规则一: 使用var、function等关键字进行声明的变量/函数,会被提升到当前作用域的最前面
只提升声明,不提升赋值
提升到当前作用域的最前面
规则二:未使用关键字进行声明的变量,会被提升为全局变量(windows.xx)
案例:
点击查看代码
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
解析:
点击查看代码
//1.函数声明在全局作用域内提升
function f1() {
// 2.变量声明在局部作用域内提升
var a;
// 3.赋值操作从右往左拆解
c = 9; // 没有用var进行声明,提升为 windows.c = 9
b = c; // 同上,windows.b = 9
a = b; // 局部变量 a = 9
console.log(a); // -> 局部a,9
console.log(b); // -> 全局b,9
console.log(c); // -> 全局c,9
}
f1();
console.log(c); // -> 全局c,9
console.log(b); // -> 全局b,9
console.log(a); // -> 未声明未定义,报错
// 最终输出:9 9 9 9 9 error
小结:
1. 函数提升
- 作用域内,命名函数何时调用都可以
使用function关键字声明的函数,格式:function fn()
- 作用域内,匿名函数在声明前调用会报错
使用函数表达式声明函数,格式:var fn = function()
2. 变量提升
-
声明同时赋值 -> 正常值
-
仅声明未赋值 -> undefined
-
未声明仅赋值 -> 正常值,提升为全局变量
-
未声明未赋值 -> error
不同情况下调用某个变量的输出结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律