课程
/前端开发
/jQuery
/jQuery源码解析(架构与依赖模块)
标准的立即调用的函数写法是:
(function(){})();
但是我看到还有这种写法
(function(){}())
这两种写法等价吗
2015-09-25
源自:jQuery源码解析(架构与依赖模块) 1-5
正在回答
javascript不存在相等的两个对象,比如[]===[],{}==={}均为false,而函数的比较最为复杂,楼主写的两个自执行函数均无返回值,浏览器便取默认值(不是undefined就是null了,实际上undefined==null)去比较,自然相等;
feibenren 提问者
这里的函数执行,比较其实比较的是执行后的结果,自然相等。如果不执行,两个引用类型的值是不相等(内存地址不相同。)
好像没回答到正题上(===。。。拜托),函数自执行的方法太多了,但绝对没有完全等价的;关于函数自执行Xfunction(){}();其中的X你只要取任何使该语句不违法的值都可以达到函数自执行(语言就是这么规定的,别问为什么),比如:1?function(){document.title='hello word'}:null;
实验了 效果是直等于 返回值true
(function(){ alert("test1"); }());
(function(){ alert("test2"); })();
alert((function(){ alert("test1"); }())===(function(){ alert("test2"); })());
浏览器中执行以上代码结果:test1,test2,test1,test2,true。
个人认为,执行效果等价,但“===”判断应为错才对啊?
举报
由浅入深地剖析jQuery库的设计与实现,揭开框架背后的秘密
1 回答老师,var F = function(){ show("FFF") } F(); (function(){ show('ajQuery3') }();这样为什么不打印呢?
1 回答请问function( selector, context ){}是两个参数,为啥在使用时传入一个参数可以解析
6 回答;(function(){})() 为什么要加 ; 分号
2 回答(function(){}())把一个函数放到小括号里面是什么意思,最外面的那层不用小括号包裹可不可以?
1 回答下边代码看不懂了 jQuery.each(options.match(rnotwhite) || [], function(_, flag) { object[flag] = true; }); return object;