jquery内部域访问,及其方法的声名问题
首先,明白一件事,如果你定义一个JS函数,如果它不可以使用,只有两种可能。
第一种:你在JSP页面的引入出错,引入顺序的问题。
第二种:就是作用域出现了问题。
还要知道的是,什么时间你写的JS会加载进来。
<script> function testAli1(){ alert("testAli1"); }
var chen = {}; $(document).ready(function(){ function testAli2(){ alert("testAli2"); } chen.testAli3=function(){ alert("testAli3"); }; }); </script>
testAli1()这个方法会在文档加载的过程中加载进来,也就是说文档从上往下执行,执行到它的时间会自动加载进来。
而如果写在ready方法里面,会在文档全部加载进来以后,再去加载这些东西。
所以说写在里面的安全性更加高一些。
但是,它一定会引发新的问题,testAli1()这个方法是一个全局的方法,你不管在哪调用都行。
testAli2()这个方法是一个绝对的内部方法,你只可能在ready这一个方法里面调用,在其它地方调用是不可能的。
如果你想要这里面的方法在任何地方都可以调用,就要加上像这种命名空间一样的东西,加上后里面的testAli3()方法就可以调用
了,而且调用的规则是chen.testAli3()。如果说你感觉这样写怕麻烦也可以直接在里面写上window.testAli3(),这其实就相当于是说明它是一个全局的东西。
例子:
(1)<a href="javascript:void(0)" onclick="testAli1()">测试1</>
(2)<a href="javascript:void(0)" onclick="testAli2()">测试2</>
(3)<a href="javascript:void(0)" onclick="testAli3()">测试3</>
(1)可正常调用 (2)报错 testAli2 not defined (3)正常调用
如果两种情况都试之后 ,还是不行,就只有最后一种情况了,就是命名冲突,你可以把命名空间或者方法这些东西给改一个名字,试一下。十分重要。
所以JS里面的不能执行的问题,就是你加载顺序写错了,这点可以一点一点的测试,十分重要。
还有就是可以调用了内部作用域里面的方法。
附:
在用Jquery的时候避免不了ready函数的使用,其实这个ready函数的作用不仅仅是在文档加载完毕后再进行相应js脚本的加载,以保证一些元素在js脚本使用以前就已经在HTML文档中存在了(避免一些报错)。其实ready函数还有一个作用就是实际上ready函数无形中已经形成了一个内部域,这个内部域里的函数的对外是不可见的。但是如果想要ready作用域里定义的函数也可以被外部调用,只要这么设定就搞定了:
window.funname=function(){ //do something };