js中全局變量修改后的值不生效【jsp頁面中各個js中內容的加載順序】


 

一個老項目中,一個jsp文件中有很多個js文件,

現在要在頁面上的一個地方判斷一個狀態,因為一直找不到原來是在哪里修改的那個狀態,所以決定不找了,而是在比較靠前引入的一個js中定義一個全局變量,然后在這個js的 $(function(){}} 方法中通過一個ajax向后台獲取正確的狀態,然后在所有的js都加載完之后根據全局變量的值的狀態來修改頁面上的邏輯。

 

但是發現,全局變量被一個外部js修改賦值后,我在jsp頁面的最下面居然取不到修改過的值。

請教同事才發現原來原因是 

 

任何一個js文件中的 $(function(){});方法中的代碼需要整個頁面(包括頁面上所有的內外js文件)都加載完成才會執行。

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        哈哈哈
        <div id="chartmain" style="width:600px; height: 400px;"></div>
    </body>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="js/echarts.js"></script>
    <!-- 引入外部js文件 -->
    <script type="text/javascript" src="js/1.js"></script>
    <script>
        //打印全局變量
        alert(HAHA);  //結果是 1,不是 2
        /**
         * 原因是在頁面中的script中的代碼是順序加載的,但是只是加載普通的變量,和方法定義,
         * 並不會執行任何一個js中(包括頁面內部script標簽中的)初始化方法 $(function(){...});中的代碼邏輯。
         * 所以上面打印的時候打印的還是全局變量定義時的值
         */
        
        //要想獲取 在外部js 1.js 的初始化方法(可能是一個同步ajax)中重新給全局變量賦的值,可以用如下方法
        $(function(){
            //在js的初始化方法中修改全局變量的值為2
            alert("修改后的值: "+HAHA);  //結果2
        });
        
    </script>
</html>

 

 

1.js代碼

//定義一個全局變量,賦值為1;
HAHA=1;

$(function(){
    //在js的初始化方法中修改全局變量的值為2
    HAHA = 2;
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM