学习笔记=>《你不知道的JavaScript(上卷)》第四章:提升(变量提升,函数声明提升)...

本文深入解析JavaScript中的提升机制,解释了编译器如何在代码执行前处理变量和函数声明,将其移动到作用域的顶部。文章强调了函数声明优先于变量声明的规则,并详细说明了提升过程对代码执行的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.1 编译器的视角看提升

引擎会在解释JavaScript代码之前首先对齐进行编译,编译过程中的一部分工作就是找到所有的声明,并用合适的作用域将他们关联起来,这也正是词法作用域的核心内容。

  正确的思路是:包含变量和函数在内的所有声明都会在任何代码执行前首先被处理。

  

var a = 6;

//编译器会将var a = 6;看作两个声明

var a;    //编译阶段进行的声明

a = 6;    //赋值声明留在原地等待执行阶段

  这个过程就好像变量和函数声明从它们原来的位置(代码编写时的位置)移动到了最顶部,这个过程就叫做提升。

  另外,所有的作用域都会提升,无论是全局作用域或是任意函数作用域。

//函数声明表达式中声明会提前,同普通变量提升一致
var fun = function(){
      console.log('this a function');
}

//----->

var fun;

fun = function(){
      console.log('this a function');
}

 

 

4.2 函数优先

函数声明与变量声明都会提升,但是要注意,是函数首先被提升,然后是变量的提升。

 

 

总结:在任意作用域中(全局作用域或函数作用域),变量和函数的声明都会被提升到作用域

   顶部(函数声明优先)。编译器会将声明与赋值看作两个步骤,先声明将声明提升到

   作用域顶部(发生在编译阶段),然后赋值声明在原处等待执行阶段(执行阶段)

转载于:https://www.cnblogs.com/huangzhenghaoBKY/p/9799123.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值