javascript执行顺序和执行时间的一些相关问题
2017-09-28 08:00
260 查看
html渲染时JavaScript的执行时间
通过设置script元素的defer属性,可以设置包围其内的js代码是在html文档加载完后才执行该js代码,还是html代码加载到该js代码时,就执行。当defer属性值为”true”或”defer”时(true比较标准),会在html文档加载后,才执行该js代码。反之,当其属性值为”false”(默认值)时,浏览器在加载html文档时,一解析到该js代码就执行。
设置defer属性值为true后,script中没有包含在函数中(并该函数没被调用)的代码会立即执行,在其函数中则不会。
因为默认false 所以一般把Javascript代码放在最后,因为放在前边有可能执行js代码时,dom节点还没有渲染出来,找不到DOM节点而报错。
onload事件函数是指html文档加载结束后执行的函数,当需要操作HTMl的DOM树时,通常应该在onload事件函数中操作,防止html还没加载完就执行js代码时,找不到指定的元素(标签)和内容。
onload标准来说与匿名函数配合使用:window.onload=function(){ html加载后做的事;}
javascript执行顺序
JavaScript是按块执行一个script标签就是一个代码块。自上而下执行(因为html是自上而下的),执行完一个代码块在执行另一个代码块。代码块间相互独立,但变量和方法共享。(但共享是指代码块加载完成之后才会共享。所以要注意代码块的顺序)
JavaScript在执行时是单线程的
分为两个阶段(与编译阶段与执行阶段)
最先是预编译阶段,先对javascript进行扫描,进行变量提升
然后,在按顺序自上向下执行
执行阶段分为进入执行上下文和开始执行阶段(JavaScript的执行环境)
JavaScript单线程与settimeout(0)详解
JavaScript时单线程的处理任务队列,可以理解为普通函数和回调函数构成的队列。在执行事件时,会将事件及回调函数放入一个栈队列中顺序执行。
上边那条也叫做异步事件驱动,当一个事件正在执行又触发了一个点击事件,就会把该事件放入等待队列。
JavaScript是单线程的但浏览器不是单线程
ajax异步请求时,浏览器会新开一个线程去执行异步请求,如果请求状态变更时且之前设置了回调,异步线程会将变更事件放入JavaScript单线程引擎队列中去。这个过程中Javascript始终是单线程的。
总结:浏览器新开一个线程请求,事件回调的时候是放入Event loop单线程事件队列等候处理。
settimeout(0)
这个重点是改变了 执行流程,他的意思是在当前代码执行完毕后0秒在执行改代码。
也就是让settimeout跳出队列。成为新的队列
javascript的预编译与执行(上下文)
当 JS 引擎开始执行预编译生成的代码时,就会进入到一个执行上下文(Executable Code - 简称 EC)相关文章推荐
- JavaScript的执行顺序及onload的事件的一些问题
- javascript的执行顺序问题
- JavaScript程序执行顺序问题总结
- JavaScript代码执行的先后顺序问题
- 动态加载JS文件,完美解决跨域、编码、嵌套、队列、兼容性、执行顺序等相关问题。
- JavaScript程序执行顺序问题总结
- 助教:C语言问题收集--scanf()的一些常见问题;switch语句;for循环的执行顺序
- javascript attachEvent绑定多个事件执行顺序问题
- JavaScript 程序执行顺序问题总结
- JavaScript代码执行的先后顺序问题
- for 中 迭代器执行顺序 和 自加的一些问题
- JavaScript 函数队列按时间间隔顺序执行
- JavaScript程序执行顺序问题总结
- html 和 javascript 的相关执行顺序
- 动态加载外部.js文件时候,javascript的执行顺序问题
- javascript执行顺序问题
- JavaScript执行顺序导致的问题
- JavaScript 程序执行顺序问题总结
- JavaScript程序执行顺序问题总结
- JavaScript程序执行顺序问题总结(转)