美文网首页技术干货程序员
关于引用 js 文件,我有话说

关于引用 js 文件,我有话说

作者: 润东成长 | 来源:发表于2017-12-09 14:57 被阅读0次

    首先,我引用一个 testFunction.js 的文件,里面的代码如下:

    function shallwego() {
        return true
    }
    function gotopage1() {
        if (shallwego) {
            window.location = "http://www.jianshu.com/p/dc062dd46e17"
        }
    }
    gotopage1();
    function gotopage2() {
            m += 1;
        }
    gotopage2();
    

    然后我在 html 文件( index.html )当中,引入上述 js 文件,代码如下:

    <script src="../js/testFunction.js"></script>
    

    然后文件的相对位置给你展示一下:


    文件相对位置

    看到这里,我想问你一个问题,如果我打开 index.html,结果会是什么样的呢?
    先猜一下,不要说出来,
    然后看下图,看看和你想的结果是不是一样的呢?
    为了方便打开页面,我直接在网址中输入本地文件的地址:

    http://localhost:63342/learnnode/html/index.html?_ijt=alk3vcpo52stc41djq106cpn51
    





    咦?控制台好像有一个错误?看不清?
    放大来看一些:


    错误报告

    你可能会有疑问了,这不是 js 文件中关于第三个函数的报错吗?
    可是我明明在第二个函数调用的时候,
    就已经通过 window.location 跳转到其他页面了呀,
    怎么会继续执行原来 js 文件里面的函数呢?

    你可能想当然的以为,第三个函数不会执行,而是第二个函数执行完了之后,直接 window.location = "…"就跳转走了。
    但是实际上,在引用 js 文件的时候,你可以把它理解成,这个 js 文件相当于一个大的函数,不过,这个函数没办法 return。 所以,在执行引用的 js 文件的时候,他不会看你其中的某个函数是否会有类似于中断的功能(例如,window.location = “…”)。
    他会一次性把所有的函数都过一遍之后,再执行其中的某个函数。

    这就是为什么,明明在 js 文件中第二个函数是跳转,反而第三个函数也会「执行」,导致报错的根本原因。


    那么,知道了问题出在了哪里,该如何解决呢?

    第一种方法:拆分成两部分,然后放到两个 js 文件中。如下图:


    方法一

    我们再到浏览器中看一下,看看控制台这次会不会报错:



    怎么样?是不是好了呢?

    我们再来看第二种方法:
    我们可以通过判断语句来达到类似于「控制代码执行」的作用,代码如下:

    function shallwego() {
        return true
    }
    
    function gotopage1() {
        if (shallwego) {
            window.location = "http://www.jianshu.com/p/dc062dd46e17"
        }
    }
    
    if (true) {
        gotopage1()
    } else {
        function gotopage2() {
            m += 1;
        }
        gotopage2()
    }
    
    

    效果也是一样的,你可以试一下。我这边就不附图了~

    方法三:借用立即执行函数

    function shallwego() {
        return true
    }
    (function() {
        if (shallwego) {
            window.location = "http://www.jianshu.com/p/dc062dd46e17"
        }
    }());
    
    function gotopage2() {
        m += 1;
    }
    gotopage2();
    

    立即执行函数的好处是,可以在函数创建完之后就立刻调用。
    不过我在实际使用的时候,发现并没有解决问题,报错还是一样出现:


    错误好像还没有消失

    可能是我的写法不对,
    我有时间的话会研究一下关于立即执行函数有关的知识。


    最后,欢迎优秀的你给我提出宝贵的意见和建议。
    我会不断的坚持,将自己打磨的越来越优秀。

    相关文章

      网友评论

        本文标题:关于引用 js 文件,我有话说

        本文链接:https://www.haomeiwen.com/subject/qqeyixtx.html