js中全局变量修改后的值不生效【jsp页面中各个js中内容的加载顺序】

作者:无名 - 其它综合 -

一个老项目中,一个jsp文件中有很多个js文件,

现在要在页面上的一个地方判断一个状态,因为一直找不到原来是在哪里修改的那个状态,所以决定不找了,而是在比较靠前引入的一个js中定义一个全局变量,然后在这个js的 $(function(){}} 方法中通过一个ajax向后台获取正确的状态,然后在所有的js都加载完之后根据全局变量的值的状态来修改页面上的逻辑。

但是发现,全局变量被一个外部js修改赋值后,我在jsp页面的最下面居然取不到修改过的值。

请教同事才发现原来原因是

任何一个js文件中的 $(function(){});方法中的代码需要整个页面(包括页面上所有的内外js文件)都加载完成才会执行。

lt;!doctype htmlgt;
lt;htmlgt;
    lt;headgt;
        lt;meta charset="utf-8" /gt;
        lt;titlegt;lt;/titlegt;
    lt;/headgt;
    lt;bodygt;
        哈哈哈
        lt;p id="chartmain" style="width:600px; height: 400px;"gt;lt;/pgt;
    lt;/bodygt;
    lt;script type="text/javascript" src="js/jquery-3.3.1.min.js"gt;lt;/scriptgt;
    lt;script type="text/javascript" src="js/echarts.js"gt;lt;/scriptgt;
    lt;!-- 引入外部js文件 --gt;
    lt;script type="text/javascript" src="js/1.js"gt;lt;/scriptgt;
    lt;scriptgt;
        //打印全局变量
        alert(haha);  //结果是 1,不是 2
        /**
         * 原因是在页面中的script中的代码是顺序加载的,但是只是加载普通的变量,和方法定义,
         * 并不会执行任何一个js中(包括页面内部script标签中的)初始化方法 $(function(){...});中的代码逻辑。
         * 所以上面打印的时候打印的还是全局变量定义时的值
         */
        
        //要想获取 在外部js 1.js 的初始化方法(可能是一个同步ajax)中重新给全局变量赋的值,可以用如下方法
        $(function(){
            //在js的初始化方法中修改全局变量的值为2
            alert("修改后的值: "+haha);  //结果2
        });
        
    lt;/scriptgt;
lt;/htmlgt;

1.js代码

//定义一个全局变量,赋值为1;
haha=1;

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

js中全局变量修改后的值不生效【jsp页面中各个js中内容的加载顺序】

原文地址:https://www.cnblogs.com/libin6505/p/10457988.html

该篇内容就是由IT人知识库(原文链接:http://www.itpeo.net/9999/4559411.html)小编为各位整理





每个开发者都应该知道的SOLID原则

每个开发者都应该知道的solid原则 单一职责原则(srp) 它为什么违反了 srp? 这种设计将来会带来什么问题 ...

2018.12.6区块链论文翻译

research on the security ofblockchaindata: a survey (北京理工 am ...

[转]我是蒟蒻,但我有我的OI信仰

我想最大的浪漫莫过于有人陪你征战oi吧有多少无眠的夜晚?我总是在想,到底是为了什么?为了自招?为了省队?为了签约?这条路 ...

WPF捕获全局未处理异常

在wpf开发过程中我们一般都用try/catch块来捕获异常,但不是每个异常我们都能捕获,程序总会出现一些意想不到情 ...

边看MHA源码边学Perl语言之二ManagerUtil

边看mha源码边学perl语言之二managerutil.pm mha版本 为了让大家有一个共同的代码学习环境,特别从网 ...

Python代码整洁优化

1.提炼函数 # 提炼之前 def user_info(): users = db.session.que ...

20180903-0909总结

1 长基因字符串(只有atcg组成) 多个短字符串 求长字符串模糊匹配任意一个短字符串的所有下标 模糊匹配:可以有一个位 ...

文件与IO

1 name = ["name", ‘leiwenxuan‘,25] 2 # print(‘,‘.join(name) ...

USACO2006NOVCornFields

题目描述 farmer john has purchased a lush new rectangular pastu ...

C语言判断素数(break语句)(continue语句)

一、判断素数 试题:从键盘上输入一个正整数n,判断是否为素数。 分析:素数就是只能被1和自身整除的数,判断素数的算法是, ...

Python之字符串正则匹配

需求: 正则表达式匹配某个文本模式,但是它找到的是模式的最长可能匹配(因为是贪婪匹配 )。 而你想修改它变成查找最短的可 ...

linux基础知识-链接列表

linux基础知识-链接列表 1. 安装centos 7 1.1 linux的初识 1.2 centos 7安装 ...

SQLAlchemy(常用的SQLAlchemy列选项)

常用的sqlalchemy列选项 类型名 python中类型 说明 integer ...

valgrind调查内存leak

快有几个月没更新了,记录一下最近解决问题用到的工具吧. 最近代码跑压力测试,总是发现内存在无规律的慢慢增加,因此在and ...

Redis数据操作之字符串|Redis

|字符串操作 -- 设置字符串 set key value # 如果字符串键key已经存在, 那么使用新值覆盖原来的 ...

powerdesigner将name的名字赋给comment

1 powerdesigner中批量根据对象的name生成comment的脚本执行方法:open pdm -- tool ...

test20180922古代龙人的谜题

题意 问题描述 mark douglas是一名调查员。他接受了「调查古代龙人」的任务。经过千辛万苦,mark终于找到了一 ...

人生的主干,提及程序化

写字的时候要有主干,不要看着别人的文字抄写,要自己心中才思喷涌而出,下笔有神; 每天生活也要主干,如果工作是我们的主干, ...

iOS原生流畅滚动属性overflow-scrolling:touch

在移动端中,现在使用系统的滚动条已经体验很好了,但发现对某个元素使用了overflow:scroll时,如果有滚动条,在 ...

【Codeforces444A】DZYLovesPhysics

【链接】 我是链接,点我呀:) 【题意】 题意 【题解】 两个点的子图他们的密度是比所有联通生成子图都要 ...