博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的变量提升(Hoisting)
阅读量:6703 次
发布时间:2019-06-25

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

译者按: let和var对于变量提升的影响不同。

  • 原文:
  • 译者:

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

clipboard.png

提升(Hoisting)并不是指函数或则变量移动到最顶部。实际上,它们并没有移动到任何其它地方去。

<!-- 提升操作是在函数声明的时候,整个函数已经在内存中。 -->

对于变量声明,JavaScript引擎会在初始化变量的时候赋值为“undefined"。如下图所示,在第6行设置断点来查看:

clipboard.png

有没有注意到变量showme的值最开始是undefined。当JavaScript引擎执行完第6行代码,showme的值会更新为hoisting

<!-- 对于声明的函数,因为已经整个添加到内存空间,所以可以在文件的任何位置调用函数。但是变量不行,变量使用前必须先声明。

-->

来看看使用let和var声明的变量如何做提升的

如果使用let关键字声明变量,那么在声明之前的位置访问该变量,都会报错。

clipboard.png

但是,对于使用var声明的变量,则不会报错。

clipboard.png

译者注:从安全角度考虑,推荐使用要求更加严格的let来声明变量。如果使用var声明,测试不到位的话,可能会在运行时触发一些莫名其妙的bug。想要更保险,推荐使用做线上监控。

转载地址:http://ycblo.baihongyu.com/

你可能感兴趣的文章
Quest for sane signals in Qt - step 1 (hand coding a Q_OBJECT)
查看>>
SpringBoot的注解:@SpringBootApplication注解 vs @EnableAutoConfiguration+@ComponentScan+@Configuration...
查看>>
MVVM模式之:ViewModel Factory与注入
查看>>
SQL Server性能调优之执行计划深度剖析 第一节 浅析SQL执行的过程
查看>>
Adhesive框架系列文章--报警服务模块使用和实现
查看>>
利用自定义IHttpModule来实现URL地址重写
查看>>
在网页上嵌入 PowerPoint 演示文稿
查看>>
javascript日期格式化函数,跟C#中的使用方法类似
查看>>
CURL基于cookie的自动登录脚本
查看>>
Android杂谈--Activity、Window、View的关系
查看>>
使用delphi 开发多层应用(十)安全访问服务器
查看>>
JavaScript计算字符串中每个字符出现的次数
查看>>
mvc中的ViewData用到webfrom中去
查看>>
小白学数据分析------>描述性统计术语汇总
查看>>
STL的常用算法
查看>>
[转载]java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法
查看>>
SKY IM-A800S 驱动下载
查看>>
应用程序 数据缓存
查看>>
TFS签入签出
查看>>
第二条:遇到多个构造器参数(Constructor Parameters)时要考虑用构建器(Builder)
查看>>