JavaScript的预解析
1、我们js引擎运行分为两步:预解析 代码执行
(1)预解析 js引擎会把js里面所写的var 还有function 提升到当前作用域的最前面。
(2)代码执行 按照代码书写的书怒从上往下执行
预解析分为变量预解析(变量提升)和函数预解析(函数提升)
(1)变量提升:就是把所有的变量声明提升到当前作用域最前面,不提升赋值操作,所以,例如var fun = function(){}要是该变量的调用在在赋值之前,那么会报错
(2)函数提升:就是把所有函数声明提升到当前作用域的最前面, 不调用函数。
例如:以下程序输出的是几?
var num = 10; test = function () {//在函数内部可以访问函数外部的变量,其实num属于全局变量 //num就是链式查找的方式,上层有,就用上层,上层没有,就继续往上找,所以就叫做作用域链 console.log(num);//输出10 } test();
var num = 10; fun(); function fun() { console.log(num);//在改输出的后面有定义num var num = 20; }
解析:上面的代码类似于如下,在预解析后如下:
var num = 10;
fun();
function fun() {
var num;
console.log(num);
num = 20;
}
var num = 10; function fn() { console.log(num);//unfined var num = 20; console.log(num);//20 } fn(); 解析:上面的代码类似于如下,在预解析后如下: var num = 10; function fn() { var num; console.log(num); num = 20; console.log(num); }
fn(); console.log(c);//fn中的c为全局变量,值为10 console.log(b);//fn中的b为全局变量,值为10 console.log(a);//fn中的a为局部变量,会报错 function fn() { var a = b = c = 10; console.log(a);//10 console.log(b);//10 console.log(c);//10 }
解析:fn中var a为局部变量,b、c为全局变量。所以
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】