现在的位置: 首页 > 综合 > 正文

jquery内部域访问,及其方法的声名问题

2018年05月16日 ⁄ 综合 ⁄ 共 1250字 ⁄ 字号 评论关闭

首先,明白一件事,如果你定义一个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  };

 

抱歉!评论已关闭.