匿名函数和call以及return的问题. ().call(this);


前几天在一个著名网站看到一个有趣的效果,然后自己着手试了试.之后看了页面的原码,被代码的简短和精细吓到(也可能是少见多怪).
代码大致如下:


 (function() {
    $(function() {
        return $(".XXXX-XX").click(function() {
            return $(this).parent(".XXX").toggleClass("new");
        });
    });
}).call(this);

虽然代码的写法都很熟悉,可是仔细看了之后又觉得好陌生.问题集中在:
1. (function(){/**function body**/}).call(this) 是怎么执行的?这样写有什么好处?
2. 2个 return 的作用,为什么要 return ?, return 了什么?.

jquery 匿名函数 JavaScript call return

天刀天下第一 10 years, 4 months ago

个人理解, 如有误, 请指出.

(function(){/**function body**/}).call(this) 是怎么执行的?这样写有什么好处?
这是Javascript的 自执行函数 写法, 函数声明后立即执行. 并且设置函数执行时context为 this , 这里的 this 因执行环境会有所不同, 浏览器环境应该是 window .
但是看这代码没必要用个 call(this) , 感觉下面的写法就可以了:


 (function() {
    $(function() {
        return $(".XXXX-XX").click(function() {
            return $(this).parent(".XXX").toggleClass("new");
        });
    });
})();

2个return的作用,为什么要return?,return了什么?.
两个 return 也是可以不存在的, 不管里 return 了什么, 没人接收你的 return 值, 何必 return 呢?

狂放不羁爱奶妈 answered 10 years, 4 months ago

Your Answer