一天一个知识点 - 浅谈 JavaScript 变量提升和函数提升

前言

前些日子,在掘金上看到一片热门文章《在酷家乐做面试官的日子》。该文作者以面试官的角度,详细阐述了作为一名 web 应聘者应该具有哪些技能,才会更让人青睐。

在对比自身的过程中,发现有一些问题,或许了解,但不全面,这也是本系列文章诞生的缘由。

变量提升

什么是变量提升

JavaScript中,变量的声明(而非赋值)都将被提升到函数的最顶部。

在之前的文章曾经提到这样一个问题:

究其原因便是 "变量提升"

最简单的例子


var a = 1
console.log(a)
console.log(b)
var b = 2 

复制代码

这段代码,根据变量提升的原则,实际在执行过程中,它会解析成如下形式:


// 声明会提升
var a
var b

// 赋值不会提升
a = 1
console.log(a) => 1
console.log(b) => undefined
b = 2

复制代码

函数提升

在 JavaScript 中,函数通常被成为一等公民,函数提升的概念相较于变量提升也有一些不同的地方。

JavaScript中,变量的声明和其具体内容都将被提升到函数的最顶部。

最简单的例子


function f1(){
    return 'f1'
}
console.log(f1())
console.log(f2())
function f2(){
    return 'f2'
}

复制代码

这段代码,根据函数提升的原则,实际在执行过程中,它会解析成如下形式:


function f1(){
    return 'f1'
}
function f2(){
    return 'f2'
}
console.log(f1()) => f1
console.log(f2()) => f2

复制代码

使用 ES6 吧

在 ES6 中,新增的 let 和 const 的关键字,不存在变量提升。所以尽情按照人的思维来写代码吧。


console.log(a) => Uncaught ReferenceError: a is not defined
console.log(b) => Uncaught ReferenceError: b is not defined
let a = 1
const b = 2

复制代码

参考

系列文章

转载于:https://juejin.im/post/5c89f474f265da2d8d6a2009

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值