js函数声明提升详解

1. var 声明

console.log(a) // undefined
var a = 1;

如上, console.log()会输出undefined而不会报错, 这是因为变量提升起到了作用
我们在用var定义一个变量时, 这个变量的定义会提升到方法体的最顶端

2. 函数声明

console.log(b) // f b(){}
function b(){}

函数声明定义的这个变量也会提升到方法体的最顶端.

3. 小总结

所以:

变量声明和函数声明都会被js解释器提升到发放提的最顶端.
在生成执行环境时,会有两个阶段。第一个阶段是创建的阶段,JS 解释器会找出需要提升的变量和函数,并且给他们提前在内存中开辟好空间,函数的话会将整个函数存入内存中,变量只声明并且赋值为 undefined,所以在第二个阶段,也就是代码执行阶段,我们可以直接提前使用。

4. let 和 const 定义变量并不会发生提升

console.log(a) // Uncaught SyntaxError: Identifier 'a' has already been declared
const a = 1;
console.log(b) // Uncaught SyntaxError: Identifier 'b' has already been declared
let b = 2;

这是因为letconst 存在局部(块)作用域的概念, 会出现暂时性死区.
let 不能在声明前使用,但是这并不是常说的 let 不会提升,let 提升了,在第一阶段内存也已经为它开辟好了空间,但是因为这个声明的特性导致了并不能在声明前使用。

5. 变量提升的优先级

函数声明提升的优先级高于变量声明的提升!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值