前言
前些日子,在掘金上看到一片热门文章。该文作者以面试官的角度,详细阐述了作为一名 web 应聘者应该具有哪些技能,才会更让人青睐。
在对比自身的过程中,发现有一些问题,或许了解,但不全面,这也是本系列文章诞生的缘由。
变量提升
什么是变量提升
JavaScript中,变量的声明(而非赋值)都将被提升到函数的最顶部。
在之前的曾经提到这样一个问题:
究其原因便是 "变量提升"
最简单的例子
var a = 1console.log(a)console.log(b)var b = 2 复制代码
这段代码,根据变量提升的原则,实际在执行过程中,它会解析成如下形式:
// 声明会提升var avar b// 赋值不会提升a = 1console.log(a) => 1console.log(b) => undefinedb = 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()) => f1console.log(f2()) => f2复制代码
使用 ES6 吧
在 ES6 中,新增的 let 和 const 的关键字,不存在变量提升。所以尽情按照人的思维来写代码吧。
console.log(a) => Uncaught ReferenceError: a is not definedconsole.log(b) => Uncaught ReferenceError: b is not definedlet a = 1const b = 2复制代码