Javascript 上升(Hoisting)

在面试JS的面试过程中会出现一类问题专门针对JS的“奇怪现象”去考面试者是否了解关于该语言的边边角角,本文讲的JS上升级至(hoisting)可以算作这一类现象。对于hoisting产生的困户和误解往往是因为其语言在编写(程序员的感知)和实际执行上存在着差异,导致本以为简单明了的执行逻辑出现了意想不到的结果。如果要理解其根本原因,需要了解两个JS engine解析时的两个动作:1.声明(declaration)2. 初始化 (initialization)

var a = "hello world!";

而这两个动作往往靠这一行代码完成,所以常常被认为是一步操作。在实际解析过程中,上图的代码是这样被执行的:

var a; //声明

a = "hello world!"; //初始化

“提升”一词就是形容声明变量的这一步操作,因为它被移到了作用域的顶端。但笔者觉得更贴切的说法应该是:在计算机引解析代码的过程中所有变量的声明永远在初始化之前执行。

console.log(hoist); // 打印 undefined

var hoist = 'Hello World!';

将上图的代码执行,命令行会打印undefined。原因是hoist的声明已被计算机记录在内存中,但是变量尚未初始化,所以打印undefined。但如果去除最后一行,单纯执行console.log(hoist),程序会直接报错并推出。因为解析时未找到任何声明变量名为hoist。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值