理解变量提升

ES5提供了两种变量声明的方式,分别是var和function。var是变量声明,function是函数声明。函数声明优先于变量声明 ,解析器会率先读取函数声明,并使其在执行任何代码之前可用。

理解一个过程

程序员都知道计算机只能识别0和1,也就是二进制。那么计算机是怎么识别代码的呢?计算机执行代码前会先将代码编译 成二进制文件,在运行时这个二进制文件会进过一个解析器 ,计算机能准确执行解析后的代码。

而ES5中函数声明优先于变量声明正是因为解析器在向执行环境中加载数据时,对函数声明和变量声明没有没有一视同仁 ,解析器会率先读取函数声明,并使其在执行任何代码之前可用。

函数提升过程

//提升前
console.log(sum(5,10));     //输出15,不报错
function sum(a,b){
    return a+b;
}

//解析器解析后代码执行顺序,函数声明被提升。
function sum(a,b){
    return a+b;
}
console.log(sum(a,b));

变量提升

//提升前
console.log(a);     //undefined
var a=10;

//提升后
var a;  //变量只声明未赋值,变量值初始化为undefined,这是输出undefined的原因
console.log(a);     //undefined
a = 10;     //变量在‘原地’赋值,即赋值没提升

声明后为初始化的变量会保存一个特殊的值——undefined.

变量和函数共存时

//提升前
log();      //"Hello world!"
var a = 10;
console.log(a);     //10
console.log(b);     //undefined
var b = 20;
function log(){
    console.log("Hello world!");
}
console.log(b);     //20

//提升后
function log(){     //函数声明优先于变量声明
    console.log("Hello world");
}
var a;
var b;
log();      //"Hello world"
a = 10;
console.log(a);     //10
console.log(b);     //undefined
b = 20;
console.log(b);     //
posted @   半个小菜鸡  阅读(258)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示