<body>
<script type = "text/javascript" src="test.js"></script>
</body>
test.js
//封装loadScript(),实现加载异步js
function loadScript(url,callback){//第一个参数是源路径,第二个参数是回调函数(当满足一定条件才执行的函数)
var script = document.createElement('script');
script.type = 'text/javascript';
//附加到documen内才能被执行
document.head.appendChild(script);
// 有无提示机制,下载完提醒可以执行程序?有!
if(script.readyState){
// IE使用状态码readyState会根据script标签动态改变其值
// 正在加载——'loading'
// 加载完毕——'complete/loaded'
// IE提供了一个监听状态码的事件onreadystatechange
script.onreadystatechange = function(){
if(readyState == 'loaded' || readyState == "complete"){
callback();// ②tools[callback]();
}
}
}else{
//当它触发onload事件则证明下载结束
script.onload = function(){//兼容性好(除IE以外)
callback();//②tools[callback]();
}
}
script.src = url//下载需要一定时间;先绑定事件,再引入
}
// loadScript('todo.js',a);
//执行结果:a is not defined
//原因:因为执行到该句时,没有加载函数体,所以系统只会认为a是一个未定义的变量
//方法一:
loadScript('todo.js',function(){
a();
// });
//方法二:将上面代码改成②号代码
// loadScript('todo.js','b');
todo.js
function a(){
alert('a');
}
var tools = {
b : function b(){
alert('b');
}
}