callback 和 js加载的位置问题

callback 是一个函数的调用过程 就是有一个函数a 它有一个参数b 当a执行完毕后自动的去调用b (这是上午的学习心得 有错误的地方 请帮忙指出)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>callback test</title>
        <script type="text/javascript">
            function a(callback) {
                alert("我是第一个执行的函数我会自动调用下一个函数");
                callback();
            }
            function b() {
                alert("我被调用了");
            }
            a(b);
        </script>    
    </head>
    <body>
        
    </body>
</html>

上面的是一个简单的例子 当然你也可以在a中去调用b   a() {b();}; 这样缺少了灵活性

 

下面是关于js加载位置的问题

我开始都是把js放在<head></head>中 看书中有放在</body>之前 不明白到底是怎么回事 几天看了一篇博文 给大家分享下

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>callback test</title>
        <script src="a.js" type="text/javascript"></script>    
        <script src="b.js" type="text/javascript"></script>
    </head>
    <body>
        
    </body>
</html>

你是这样的加载js的话 当浏览器遇到script标签的时候会等到<script>执行完毕 才进行页面的下载和渲染 也就是可能看见页面被锁死了 还有可能出现在js中你操作了一个还未加载的元素(图片)出现错误 (当然你可以通过window.onload 弥补 这个我在下面会说)

这是另一种思路

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>callback test</title>
        
    </head>
    <body>
        <script src="a.js" type="text/javascript"></script>    
        <script src="b.js" type="text/javascript"></script>
    </body>
</html>

它是在页面的加载完成后去下载和执行js 但是这样会有2次GET请求 好的方法是减少GET请求 这又有两种方案

(1)你可以将a.js b.js 合并  但是这样不好 当加载的js过多时 合并的过于复杂 同时也每个js都有相应的功能  合并对复用的体现不好

(2)其实上面的每种js的加载方式都是阻塞加载 最好是在window.onload 事件触发后追加js  这又有两种情况

  2.1 当你加载的js 是无先后执行顺序的

    你可以通过这样   window.onload = function() {

      $("#head").append("<script src="a.js" type="text/javascript"></script>");

      $("#head").append("<script src="b.js" type="text/javascript"></script>");

    }

  2.2 当你的js是有先后的执行顺序的时候 就要用到我们开始讨论的回调函数了  就是在a.js 加载执行完毕去调用b.js 的加载和执行

    <script type="text/javascript">
            function loadScript(url,callback) {
                var scirpts = document.createElement("<script>");
                script.type = "text/javascirpt";

                if(scripts.readyState) {//IE
                    scripts.onreadystatechange = function() {
                        if(scripts.readyState === "loaded" || scripts.readyState === "complete") {
                            scripts.onreadystatechange = null;
                            callback();
                        }
                    }
                } else {//非IE
                    scripts.onload = function() {
                        callback();
                    }
                }
                scripts.src = url;
                document.getElementById("head").appendChild(scripts);
            }
            loadScript("a.js",function() {
                loadScript("b.js",function() {

                });
            })
        </script> 

       

callback 和 js加载的位置问题,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。