前言
前些日子,在掘金上看到一片热门文章《在酷家乐做面试官的日子》。该文作者以面试官的角度,详细阐述了作为一名 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
复制代码