形如$(function(){});内的代码的执行优先级是非常低的,它是一个假的自执行方法。

举个栗子:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
<html>
<head>
<script language="javascript" src="jquery-1.7.1.min.js"></script>
<script>
var x="123";
$(function(){
console.log("x="+x);
});
x="321";
</script>
</head>
<body>
</body>
</html>

这段代码的输出结果是x=321;而不是x=123;

不过如果将其改成如下形式:

<html>
<head>
<script language="javascript" src="jquery-1.7.1.min.js"></script>
<script>
var x="123";
(function(){
console.log("x="+x);
})();
x="321";
</script>
</head>
<body>
</body>
</html>

就成了真自执行函数,定义完成之后立即执行,输出x=123.

 

如果在一个jsp页面中使用方法一的方式写了一段代码,而在另一个页面中使用<%@ include>标签将其引入,恰好两个页面中有一个JavaScript全局变量是同名的。

那么问题就出现了,页面一中的方法实际上使用的是页面二中的变量。

这是个坑。

不过这么做也有个好处,可以在页面二中控制页面一的执行流程,在不需要修改页面一的情况下,可惜貌似没发现有什么用。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄