几个容易忽略的Javascript问题

1、标签的关闭方式是不一样的,这也算是W3C的失职,对于div/p/table等一系列应该包含内容的标签,关闭要使用结束标签,而不能简单的标签结尾加斜线,对于img/br/hr等本身不会包含内容的标签,可以使用空格加斜线关闭,我在写Softbiz项目(www.998st.com)的JS时,因为<script></script>写成了<script />因而导致这个标签之后的脚本不会再做解析,这是一个非常值得注意的问题,在Firefox下查看页面源代码,会发现有几行的脚本显示与其他的不一样,颜色并没有加深,就是这个问题的缘故,我昨晚花费了整整2个小时来找这个问题。

2、在引入js文件的时候要注意顺序,尤其是prototype框架和window框架,这两个框架没有定义自己的作用域,因此很容易导致冲突。如果前面定义了一个名叫A的对象,而后面又定义了一个名叫A的对象,如果后面定义的对象不含前面定义对象的某个方法的时候,则后面的脚本将无法引用前面的那个对象。

3、变量作用域的问题:
先看下代码:

  1. new  Ajax.Request(url, {method: "post" , parameters:{user_id:target_id}, onSuccess: function  (response) {
  2.              var  result = unescape(response.responseText);
  3.             data = eval(result);
  4.             data.each( function  (modulesData, index) {
  5.                 modulesData.each( function  (drag) {
  6.                      if  ($(drag)) {
  7.                          var  nodeToInsert = $(drag).parentNode.removeChild($(drag));
  8.                         $(containers[index]).appendChild(nodeToInsert);
  9.                     }
  10.                 });
  11.             });
  12.         }});

如果我将data.each放在外面来写,则无法正常运行,这时data会显示是空的,undefine状态,初步猜想可能和作用域有关,onSuccess是一个匿名函数,data在eval之后是一个数组对象,这个数组对象的作用域很有可能只是在这个函数的内部,当离开这个函数以后,这个数组对象被销毁,也就不存在了,当然只是猜想,明天有空做一下简单的验证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值