1.js是单线程的  为什么是单线程的呢  因为js作为浏览器脚本语言,会有很多和用户的互动,以及操作dom,多个线程会出问题。

2.js有同步任务,异步任务(ajax,用户点击等,settimeout)

异步任务执行机制:

a.同步任务都在主线程上执行,形成执行栈;

b.主线程外,存在一个任务队列,(虽然js是单线程的,但是浏览器内核是多线程的,在浏览器内部中不同异步操作由不同内核模块调度执行,异步操作回将相关操作添加到任务队列上,不同异步操作添加到任务队列的时机也是不同的 onclick--DOM Binding模块处理,事件触发时,回调函数会立即添加到任务队列中;settimeout -- timer模块---时间到达加入任务队列;ajax---network模块----请求完成返回后添加到任务队列)

c.一旦执行栈中所有同步任务处理完成,系统会自动读取任务队列,进入执行栈,开始执行,实现事件循环(Event Loop)

例如

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

答案是3 3 3

解析:setTimeout异步执行,要等到主线程执行完,for操作是主线程任务,i=3;再起执行settimeout  此时已经是3

改造之后变输出为0,1,2

for(var i=0;i<3;i++){
(function(i){
setTimeout(function(){
console.log(i)
},0)
})(i)
}
var obj={i:0}
for(;obj.i<3;obj.i++){
(function(obj){
setTimeout(function(){
console.log(obj.i)
},0)
})(obj)
}
var obj={i:0}
for(;obj.i<3;obj.i++){
(function(obj.i){
setTimeout(function(){
console.log(obj.i)
},0)
})(obj.i)
}

答案分别是0,1,2   和  3 3 3合0,1,2

说第二个问题之前  了解知识点

js基本类型number string boolean undefined null  基本类型“按值”访问  存放在栈区  得到实际的值

引用类型 对象 数组  函数(拥有属性和方法)并且都能修改  引用类型对象存放方式是“名字+堆地址”,赋值的过程是名字和堆地址,堆内存中的数据没有变化,所以两个对象有可以联动。

所以上面的问题  其实也是在考察这一块

var a = 1;
var obj = {
b: 2
};
var fn = function () {};
fn.c = 3; function test(x, y, z) {
x = 4;
y.b = 5;
z.c = 6;
return z;
}
test(a, obj, fn);
alert(a + obj.b + fn.c);

答案是:。。。

补充知识推荐Job Quene      https://zhuanlan.zhihu.com/p/22710155

最新文章

  1. JQuery,拼接字符串问题(求助)
  2. jquery.tmpl.js 模板引擎用法
  3. struts.xml配置详解
  4. [Stanford 2011] MVC introduction
  5. TKinter之菜单
  6. http://www.cnblogs.com/leiOOlei/p/5075402.html
  7. Oracle 经典语法(二)
  8. 二分图匹配之KM求二分图最佳匹配算法
  9. 函数之DisString
  10. java读取文件方法总结
  11. 使用ReflectionToStringBuilder实现toString方法
  12. Zabbix 3.0 基础介绍 [一]
  13. Netty 4源码解析:服务端启动
  14. iphone 屏蔽系统自动更新,消除设置上的小红点
  15. centos7安装zabbix3.0超详细步骤解析
  16. vue--vConsole
  17. Opentsdb分布式安装
  18. 如何安装pycharm
  19. cocos2d-x(十一)Lua开发飞机大战-6-加入子弹
  20. poj 2391 (Floyd+最大流+二分)

热门文章

  1. .static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗。
  2. 关于Junit中Assert已经过时
  3. twemproxy《一》
  4. C# - 音乐小闹钟_BetaV3.0
  5. php检测数组长度的函数sizeof count
  6. 修改anaconda3 jupyter notebook 默认路径
  7. python 实用技巧:几十行代码将照片转换成素描图、随后打包成可执行文件(源码分享)
  8. Spring之BeanFactory:解析getBean()方法
  9. 学习笔记之IdentityServer4(一)
  10. Redis中关于key的操作指令