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为全局变量。所以
 
复制代码

 

posted @   洛飞  阅读(185)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 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】
点击右上角即可分享
微信分享提示