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、变量作用域的问题:
先看下代码:
- new Ajax.Request(url, {method: "post" , parameters:{user_id:target_id}, onSuccess: function (response) {
- var result = unescape(response.responseText);
- data = eval(result);
- data.each( function (modulesData, index) {
- modulesData.each( function (drag) {
- if ($(drag)) {
- var nodeToInsert = $(drag).parentNode.removeChild($(drag));
- $(containers[index]).appendChild(nodeToInsert);
- }
- });
- });
- }});
如果我将data.each放在外面来写,则无法正常运行,这时data会显示是空的,undefine状态,初步猜想可能和作用域有关,onSuccess是一个匿名函数,data在eval之后是一个数组对象,这个数组对象的作用域很有可能只是在这个函数的内部,当离开这个函数以后,这个数组对象被销毁,也就不存在了,当然只是猜想,明天有空做一下简单的验证。