JavaScript中提升机制Hoisting是如何影响变量和函数声明的声明和初始化过程的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1423个文字,预计阅读时间需要6分钟。
前言:初接触JavaScript时,便知它是按顺序执行的。就像浏览器解析DOM树一样,顺序进行。解析DOM结构时,若遇到JS脚本或外部脚本,则会暂停解析,继续加载脚本。
前言
刚接触到JavaScript的时候,便知道JavaScript是按顺序执行的,是如浏览器的解析DOM树一样的流程,解析DOM结构的时候,如果遇到JS脚本或者外联脚本便会停止解析,继续下载脚本之后,执行脚本,然后再解析DOM。
然而,却因此常常碰到问题。
看如下代码以及输出:
var name; console.log(name); // undefined name = 'tom'; age = 10; var age; console.log(age); // 10
上面的代码让我们产生了疑惑,我们仅仅声明了name的时候,打印出来值是undefined,按理说,重新声明age之后,age的值应该也是undefined才对,但是输出来的却是10。这究竟是怎么回事儿呢?
我们的通用解释是,遇到了变量提升。
而这样的情况,我们在函数中也会看到,请看下面代码:
log(); console.log(name); var name = 'tom'; function log() { console.log('this is log'); }
上面代码的输出结果是什么?
输出结果:
this is log undefined
为什么会产生这样的情形呢?我们通用的解释是,函数声明提升了。
本文共计1423个文字,预计阅读时间需要6分钟。
前言:初接触JavaScript时,便知它是按顺序执行的。就像浏览器解析DOM树一样,顺序进行。解析DOM结构时,若遇到JS脚本或外部脚本,则会暂停解析,继续加载脚本。
前言
刚接触到JavaScript的时候,便知道JavaScript是按顺序执行的,是如浏览器的解析DOM树一样的流程,解析DOM结构的时候,如果遇到JS脚本或者外联脚本便会停止解析,继续下载脚本之后,执行脚本,然后再解析DOM。
然而,却因此常常碰到问题。
看如下代码以及输出:
var name; console.log(name); // undefined name = 'tom'; age = 10; var age; console.log(age); // 10
上面的代码让我们产生了疑惑,我们仅仅声明了name的时候,打印出来值是undefined,按理说,重新声明age之后,age的值应该也是undefined才对,但是输出来的却是10。这究竟是怎么回事儿呢?
我们的通用解释是,遇到了变量提升。
而这样的情况,我们在函数中也会看到,请看下面代码:
log(); console.log(name); var name = 'tom'; function log() { console.log('this is log'); }
上面代码的输出结果是什么?
输出结果:
this is log undefined
为什么会产生这样的情形呢?我们通用的解释是,函数声明提升了。

