今天看阮老师的ES6入门时,看见一个对我来说从没想到过的var赋值变量导致的错误,故记录一下

var tmp = new Date();

function f() {
  console.log(tmp);
  if (false) {
    var tmp = 'hello world';
  }
}

f(); // undefined

这种情况的起因是变量提升

我的理解是在该函数调用时,因为使用var创建的变量,作用范围只有全局与函数两种,故引擎先把所有使用var创建的变量进行创建,但并不进行赋值,创建完所有var创建的变量后,程序再从函数内第一行代码开始运行。

因为内部创建了和外部相同的变量名,内部变量便在函数内覆盖了外部变量,而输出该变量时,该变量还未赋值,便输出了undefined。

而使用let时,let只会在if下的代码块中创建局部变量tmp,未在if代码块中的代码则还是可以使用外部的tmp变量。

使用开发者工具测试了一下,和所想暂时未有冲突。

最新文章

  1. 【原创】.NET平台机器学习组件-Infer.NET连载(二)贝叶斯分类器
  2. PostgreSQL-角色、库、模式、表
  3. LeetCode-Group Shifted Strings
  4. Android中dp和px之间进行转换
  5. Unity GameObject.activeSelf, GameObject.activeInHierarchy,GameObject.SetActive和SetActiveRecursively
  6. 用MT.exe将exe中的manifest文件提取出来和将manifest文件放入exe中
  7. ajax取返回值的方法
  8. c中关于#与##的简易使用
  9. IIS MIME的 映射 网站有些类型的文件不能通过网页访问
  10. 一个web应用的诞生(7)--结构调整
  11. Selenium_WebDriver_定位元素
  12. python模拟蒙特·卡罗法计算圆周率
  13. React文档(十九)不使用ES6
  14. arduino json 解析
  15. Django 中的Form表单认证
  16. async/await让你的代码更加优雅
  17. Web操作web.config
  18. VMWare 虚拟机 安装 Mac OS X
  19. PHP SQL查询结果在页面上是乱码
  20. linux automake 交叉编译

热门文章

  1. ASP.NET MVC默认配置如有跳转到指定的Area区域中的对应程序中
  2. 【TensorFlow篇】--Tensorflow框架可视化之Tensorboard
  3. load data infile
  4. 如何在ASP.NET Core程序启动时运行异步任务(3)
  5. unity中ScriptableObject在assetbundle中的加载
  6. libevent和libcurl实现http和https服务器 cJSON使用
  7. count()聚合函数正确用法
  8. C++ 编译期封装-Pimpl技术
  9. matplotlib安装
  10. Go channel实现源码分析