理解变量提升

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);     //

转载于:https://www.cnblogs.com/Patrick-D/p/10942155.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值