技术干货程序员

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

2017-12-09  本文已影响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();

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


错误好像还没有消失

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


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

上一篇下一篇

猜你喜欢

热点阅读