本文目录
- 关于JavaScript的异步settimeout里let变量的赋值问题
- javascript脚本如何异步加载,有什么作用
- javascript如何从异步请求中返回数据
- 如何让一段一般的JS脚本执行在一段异步代码
关于JavaScript的异步settimeout里let变量的赋值问题
《script》 var i=1; //全局变量 function dd(i) { { alert(i); //这里弹出的是全局变量i,所以是1 var i=0; //这里又定义了一个局部变量i,等于0,且每次执行都重新定义这个局部变量,并等于0;这个i的作用域范围就是在dd()函数体内,每次dd()函数执行完自动销毁 }setTimeout(’dd(i)’,1500) } setTimeout(’dd(i)’,1500) 《/script》 -------------------- 要i等于0,在你的基础上有两个办法: 1:修改全局变量i 《script》 var i=1 function dd(i) { { alert(i) window.i=0 //这里修改的是第一行定义的那个i,第一次弹出1,以后弹出0 }setTimeout(’dd(i)’,1500) } setTimeout(’dd(i)’,1500) 《/script》 2: 《script》 var i=1 function dd(i) { { var i=0 alert(i) //两句对调,但这个i就成了dd()函数体内的局部变量,所以一直弹出0 }setTimeout(’dd(i)’,1500) } setTimeout(’dd(i)’,1500) 《/script》
javascript脚本如何异步加载,有什么作用
关于JavaScript脚本加载的问题,相信大家碰到很多。主要在几个点——1》 同步脚本和异步脚本带来的文件加载、文件依赖及执行顺序问题2》 同步脚本和异步脚本带来的性能优化问题深入理解脚本加载相关的方方面面问题,不仅利于解决实际问题,更加利于对性能优化的把握并执行。先看随便一个script标签代码——复制代码代码如下:《script src="js/myApp.js"》《/script》如果放在《head》上面,会阻塞所有页面渲染工作,使得用户在脚本加载完毕并执行完毕之前一直处于“白屏死机”状态。而《body》末尾的打脚本只会让用户看到毫无生命力的静态页面,原本应该进行客户端渲染的地方却散布着不起作用的控件和空空如也的方框。拿一个测试用例——代码如下:《!DOCTYPE html》《html》《head lang="en"》 《meta charset="UTF-8"》 《title》异步加载script《/title》 《script src="js/test.js"》《/script》《/head》《body》 《div》我是内容《/div》 《img src="img/test.jpg"》《/body》《/html》其中,test.js中的内容——代码如下:alert(’我是head里面的脚本代码,执行这里的js之后,才开始进行body的内容渲染!’);我们会看到,alert是一个暂停点,此时,页面是空白的。但是要注意,此时整个页面已经加载完毕,如果body中包含某些src属性的标签(如上面的img标签),此时浏览器已经开始加载相关内容了。总之要注意——js引擎和渲染引擎的工作时机是互斥的(一些书上叫它为UI线程)。因此,我们需要——那些负责让页面更好看、更好用的脚本应该立即加载,而那些可以待会儿再加载的脚本稍后再加载。
javascript如何从异步请求中返回数据
页面的Javascript中部分函数及其功能: StartHTTPRequest:开始创建一个HTTP请求 function createHTTPRequest( handler ) { var req = null; if (typeof window.ActiveXObject != ’undefined’ ) { // Build the Microsoft variation req = new ActiveXObject("Microsoft.XMLHTTP"); req.onreadystatechange = handler; } else { // Build the standards compliant variation req = new XMLHttpRequest(); req.onload = handler; } return req; } addField:它增加从服务器中以XML形式返回的不同字段 function addField( sid, stitle ) { s_fields.push( { id: sid, title: stitle } );//其中s_fiels是上边定义的一个变量 } getData:调用createHTTPRequest开始一个请求 var s_req = null; function getData() { s_req = createHTTPRequest( handleResponse ); try { s_req.open( ’GET’, s_url+"&count="+s_reqcount, true ); s_reqcount += 1; s_req.send( "" ); } catch( e ) { alert( e.toString() ); } } handleResponse:函数分析XML并且为该数据表格创建一些新的HTML-这个HTML将被放置到"grid"标签中
如何让一段一般的JS脚本执行在一段异步代码
通过回调函数来实现:
function action (callback) { setTimeout(callback, 0);}action(function () { for (let i=0; i《1000000; i++) { // 这段耗时的代码不会堵塞程序执行 }});alert(’hello world!’);