2.js单独文件不能调用是因为你没有引用js文件,如果引用了的话,也是可以调用的。
引用方式,你可以直接拖拽(我一般都是拖拽,因为路径准确),也可以自己写,引用脚本:<script src="Scripts/JScript.js" type="text/javascript"></script>
3.还有就是,引用的js文件一定要在调用之前,否则就找不到函数了,会报错或undefined
例如:
调用页面:
<script src="Scripts/JScript.js" type="text/javascript"></script>
<script type="text/javascript">
aa()
</script>
Script.js中代码:
function aa() {
alert("js文件掉用")
}
无阻塞加载js浏览器加载静态资源和js的方式都是线性加载,所以一般情况可以将js放到</body>前,防止UI线程的阻塞。
而某些时候我们既希望js在整个网页的头部就加载,又担心js阻塞导致网站加载缓慢,就可以用到无阻塞加载js技术。
Dynamic Script Elements 动态脚本元素
DOM允许我们使用Javascript动态创建HTML的几乎所有文档内容,一个新的<script>元素可以非常容易的通过标准DOM创建:
var script = document.createElement ("script")script.type = "text/javascript"script.src = "file1.js" document.body.appendChild(script)
新的<script>元素加载file1.js源文件。此文件当元素添加到页面后立刻开始下载。此技术的重点在于:无论在何处启动下载,文件的下载和运行都不会阻塞其他页面处理过程。
当文件使用动态脚本节点下载时,返回的代码通常立即执行(除了Firefox和Opera,它们将等待此前的所有动态脚本节点执行完毕)。
大多数情况下,我们希望调用一个函数就可以实现Javascript文件的动态下载。下面的函数封装实现了标准实现和IE实现:
function loadScript(url, callback){ var script = document.createElement ("script") script.type = "text/javascript" if (script.readyState){ //IE script.onreadystatechange = function(){ if (script.readyState == "loaded" || script.readyState == "complete"){ script.onreadystatechange = null callback() } } } else { //Others script.onload = function(){ callback() } } script.src = url document.getElementsByTagName("head")[0].appendChild(script) } loadScript("file1.js", function(){ //调用 alert("File is loaded!") })
此函数接受两个参数:Javascript文件的Url和一个当Javascript接收完成时触发的回调函数。属性检查用于决定监视哪种事件。最后一步src属性,并将javascript文件添加到head。
动态脚本加载是非阻塞Javascript下载中最常用的模式,因为它可以跨浏览器,而且简单易用。