博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一天一个知识点 - 浅谈 JavaScript 变量提升和函数提升
阅读量:6238 次
发布时间:2019-06-22

本文共 984 字,大约阅读时间需要 3 分钟。

前言

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

参考

系列文章

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

你可能感兴趣的文章
CI3如何使用controller继承
查看>>
Moodle介绍篇
查看>>
nagios部署
查看>>
CentOS 内核升级步骤和方法
查看>>
俄罗斯方块,算法简单 注释详细,大家运行玩玩
查看>>
centos6.5 iptables 配置
查看>>
tuxera NTFS 2016支持macOS 10.12 Sierra
查看>>
ftpclient 上传下载文件
查看>>
JQuery 获取touchstart,touchmove,touchend 坐标
查看>>
exp/imp远程操作数据库
查看>>
安全狗云备份 数据库、网站备份好帮手
查看>>
《Linux 内核分析》课程作业(1)——计算机基本原理和汇编基础
查看>>
ORACLE 近期执行的sql
查看>>
WAS集群安装<六>错误解答及概念术语
查看>>
编写GO的WEB开发框架 (九): Dao和Service
查看>>
【js】call,apply的区别
查看>>
node.js 基于socket.io的聊天室
查看>>
使用jQuery和ajax代替iframe
查看>>
Keepalived + nginx实现高可用性和负载均衡
查看>>
Git整理
查看>>