xhr.onload和xhr.onreadystatechange

一个关系不是很大的有趣链接:理解formdata,Blob等数据类型

我在这文章里看到张哥关于ajax的xhr.onload的写法,想起我们以前不是又得onreadystatechange,又得readystate,
所以产生了疑问:xhr.onloadxhr.onreadystatechange效果一样吗?
Stack Overflow的高票回答:Is onload equal to readyState==4 in XMLHttpRequest?
答案:这是xhr2才有的,如果浏览器支持就用,一样的。虽然说不是高票回答就是真理,但心理看着踏实是肯定的。。。

另外:Stack Overflow打开缓慢不是服务器太远的原因,跟墙有关。但墙的不是它,是它引用了谷歌下的jq。。。火狐有插件可以让他禁止加载这些不能加载的东西。哎,哎,哎。

完。

有趣的this,对与编译器的一些猜想

话不多少,上马

    var a=1;    
    var obj={
        a:2,
        ga:function(){
            return this.a
        }
    }
    console.log((obj.ga=obj.ga)());//1
    console.log((obj.ga)());//2
    console.log((b=obj.ga)());//1

根据8跟10行,我只能斗胆猜测:
编译器为了省事,直接利用obj.ga得到的值进行xx.()这种函数调用,导致不管谁调用this指向都是全局的this。。。

挖个坑吧,我很想被打脸的。
完。

关于jQuery的remove和clone等需要注意的地方

jquery的remove这个api与detach的区别文档中的解释是:前者不仅删除元素,还把其属性删除。后者也是删除,但保留绑定在元素上的事件,属性这些。
就绑定事件这一项来说:
第一次,我用js的.onclick给元素a加了个事件,用jq的remove删了再加回去,发现没效啊!事件还在。
第二次,刷新,用jq的click给元素a加事件,再同样的一番操作,嗯,事件没有了。
结论:这里有个坑!remove清除的是用jq加的事件,用js加的没有清掉。
所以引出了我的一个猜想加模糊的印象:jq加事件是把事件放在一个队列里,用时去取,而不是简单的用js的实现方法代替。
猜想对不对呢?跟我哪天看看源码再回来回答这个问题,挖坑要紧!

关于事件绑定的this指向,和匿名函数的解绑方法

事件绑定的this指向

原来addEventListenerattachEvent的this指向不同,前者是调用该函数的对象(合理)。后者是Window(可能还有别的,比较alert也看不了什么,console又用不了,嗯你知道我在说IE)。
要修正指向就用bind()咯。

事件解绑中的匿名函数

都知道匿名函数解绑不是长的一样就可以的,因为他们是引用类型,长的一样在内存地址中却是不同。故可以将匿名函数存到对象的自定义属性里,等解绑时判断解绑填的函数参数是否跟自定义属性长的一样(判断长的一样用toString转化为字符串来比较),长得一样的话就用赋值把函数参数(用来解绑的)给换成自定义属性对应的函数(这样就同一个了)
完。