形如$(function(){});内的代码的执行优先级是非常低的,它是一个假的自执行方法。
举个栗子:
<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全局变量是同名的。
那么问题就出现了,页面一中的方法实际上使用的是页面二中的变量。
这是个坑。
不过这么做也有个好处,可以在页面二中控制页面一的执行流程,在不需要修改页面一的情况下,可惜貌似没发现有什么用。