Html——ie打开项目,外引js,引入成功却报错:无法获取未定义或 null 引用的属性“getItem”
参考:https://www.cnblogs.com/qq254980080/p/11785677.html
https://blog.csdn.net/u014091101/article/details/88057449
https://blog.csdn.net/qq_39207948/article/details/80615108
我的情况:页面中外引index.js,本地用ie8浏览器打开,控制台报错:
index.js:
··· var token = sessionStorage.getItem('token'); ··· var indexLoad = { index: function () { ··· } } ···
html:
<html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=8"> <script src="js/index.js"></script> </head> <body> ··· </body> <script> $(document).ready(function () { indexLoad.index(); }); </script> </html>
刚开始以为是index.js没有引入成功,就在index.js的第一行打印,控制台是有输出的。排除引入失败的原因,挨个打印,发现获取token报错后,js就没有继续往下执行了,所以才会报第二个错。
总结:
报错1原因 —— IE8-IE10中是需要服务器或者localhost,才能使用localStorage和sessionStorage
报错2原因 —— js是‘单线程’语言,执行模式有两种:同步,异步
单线程:只有一条流水线
同步:依次在流水线上执行
异步:流水线旁加了一个临时储物台(任务队列),会把某些模块拿到临时储物台,或者会把临时储物台的某些模块插队到流水线
js默认模式是同步模式,按流水线执行:A,B,C,不管A里边代码运行时间多长,都要先执行完A,再执行B,再执行C