第一种:问题请求代表执行打印出来的是什么?

       //定时器执行页面崩溃
var bo = true;
setTimeout(function () {
console.log("定时器执行");
bo = false;
}, 1000);
while (bo) {
console.log(bo);
}
console.log(bo);

分析:js为单线程执行,也到定时器会跳过定时器,执行后面代码,待定时器事件到在执行定时器里面函数。

上面代码的情况,bo为true。页面一直执行while,页面卡死。

浏览器内核实现允许多个线程异步执行,这些线程在内核制控下相互配合以保持同步.假如某一浏览器内核的实现至少有三个常驻线 程:javascript引擎线程,界面渲染线程,浏览器事件触发线程,除些以外,也有一些执行完就终止的线程,如Http请求线程,这些异步线程都会产 生不同的异步事件,下面通过一个图来阐明单线程的JavaScript引擎与另外那些线程是怎样互动通信的.虽然每个浏览器内核实现细节不同,但这其中的 调用原理都是大同小异.

第二种:最后输出的结果是什么?

        //for循环变量
var arr = [1,2,3,4];
for (var i = 0; i < arr.length; i++) {
setTimeout(function () {
console.log(arr[i]);
},1000);
}
console.log(i);

结果为:underfind。

解析:最后执行到i为4,arr[4]超出数组。

解决方式:

方法一:

        //let 语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。
//在es6中新增了let命令声明变量,用法和var类似,不过let所声明的变量,只在let命令所在的代码块有效果,for循环的计数器中就很适合let命令
for (let i = 0; i < arr.length; i++) {
setTimeout(function () {
console.log(arr[i]);
}, 1000);
}

方法二:

        //加个闭包
for (let i = 0; i < arr.length; i++) {
(function (i) {
setTimeout(function () {
console.log(arr[i]);
}, 1000);
})(i)
}

最新文章

  1. php中include()和require()的区别
  2. .NET下载文件报错System.UnauthorizedAccessException的解决方法
  3. 容器--EnumMap
  4. zk label控件内容换行
  5. 2013年的一些常用PHP資源整理下載
  6. linux 强大的编辑器之vi
  7. POJ 1665
  8. 浅谈JAVA集合框架(转载)_常用的Vector和HashMap
  9. index unique scan
  10. iOS之即时通讯相关理解
  11. java打包/命令行方式运行jar(命令行进行程序测试)
  12. 定时每天备份mysql
  13. HoloLens开发手记 - 开始使用Vuforia Getting started with Vuforia
  14. Spring基础篇——DI和AOP初识
  15. 47.Odoo产品分析 (五) – 定制板块(2) – 为业务自定义odoo(2)
  16. 使用VirtualBox把IMG文件转换为VDI文件
  17. apicloud 消息推送与接收
  18. GitLab使用自定义端口
  19. windows 批处理文件调用exe
  20. 删除编辑文件警告Swap file “…” already exists!

热门文章

  1. Golang 之 Qrcode 二维码
  2. Oracle 11g 重建EM需要删除的对象
  3. 1 Python入门及计算机硬件知识
  4. C++11学习笔记之三lamda表达式,std::function, std::bind
  5. eclipse Multiple annotations found at this line
  6. 编写高质量代码改善C#程序的157个建议——建议71:区分异步和多线程应用场景
  7. POJ 3581 Sequence(后缀数组)
  8. CodeForces 877E Danil and a Part-time Job(dfs序+线段树)
  9. C#基础入门 四
  10. oracle数据库sqlldr命令的使用