最近在github上大火的43到js代码题,有很多人搬运。
原链接https://github.com/lydiahallie/javascript-questions

1.下面代码的输出是什么?

function sayHi() {
console.log(name);
console.log(age);
var name = "Lydia";
let age = 21;
} sayHi();

A: Lydia 和 undefined
B: Lydia 和 ReferenceError
C: ReferenceError 和 21
D: undefined 和 ReferenceError

使用let关键字(和const)声明的变量也会存在变量提升,但与var不同,初始化没有被提升。 在我们声明(初始化)它们之前,它们是不可访问的。 这被称为“暂时死区”。 当我们在声明变量之前尝试访问变量时,JavaScript会抛出一个ReferenceError。变量的赋值可以分为三个阶段:

1.创建变量,在内存中开辟空间

2.初始化变量,将变量初始化为undefined

3.真正赋值

2.下面代码的输出是什么?

for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1);
} for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1);
}

  

A: 0 1 2 and 0 1 2
B: 0 1 2 and 3 3 3
C: 3 3 3 and 0 1 2

 

由于JavaScript中的事件执行机制,setTimeout函数真正被执行时,循环已经走完。 由于第一个循环中的变量i是使用var关键字声明的,因此该值是全局的。 在循环期间,我们每次使用一元运算符++都会将i的值增加1。 因此在第一个例子中,当调用setTimeout函数时,i已经被赋值为3。

作者:ConardLi
链接:https://juejin.im/post/5d0644976fb9a07ed064b0ca
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

最新文章

  1. Java随笔一
  2. JavaScript学习12 JS中定义对象的几种方式
  3. 【温故而知新-Javascript】使用Web存储
  4. 获取真实ip的报告
  5. LA 4119 - Always an integer
  6. 程序自启动及后台持续运行的研究(voip和GPS方式)
  7. centos-nginx添加模块(无需重新编译)
  8. 教你在你的应用程序中扩展使用dynamic类型
  9. 基于HTML5的SLG游戏开发(一):搭建开发环境(1)
  10. (二)backbone - DEMO - user list
  11. php.ini 全站,和htaccess web目录 默认头部和尾部 auto_prepend_file
  12. (简单) ZOJ 3209 Treasure Map , DLX+精确覆盖。
  13. 开发《WORD阅读器》小结(1)
  14. vue之地址栏#号问题
  15. [国嵌攻略][068][tftp网络协议实现]
  16. SQLite3的MFC使用
  17. [HDFS_1] HDFS 的概念和特性
  18. Windows server 2008 r2下载地址和激活破解方法
  19. python下对appium服务端的操作
  20. NOI-1.1-08-字符三角形

热门文章

  1. http response 过长 导致Connection reset
  2. Android HttpClient 用法以及乱码解决
  3. lavarel中如何使用memcache
  4. iOS开发本地推送
  5. iOS之UIGraphics.h方法简介
  6. tty who 命令
  7. 06_springmvc之参数绑定(pojo和集合)
  8. 第12章 SQL联接
  9. 05-3-style标签属性
  10. typeof 、Object.prototype.toString和 instanceof