问答详情
源自:1-5 立即调用表达式

(function(){ alert("test"); }()) === (function(){ alert("test"); })(); 这两个是不是等价的

标准的立即调用的函数写法是:

(function(){})();

但是我看到还有这种写法

(function(){}())

这两种写法等价吗

提问者:feibenren 2015-09-25 21:44

个回答

  • qq_最初的梦想_6
    2015-11-17 21:59:42
    已采纳

    javascript不存在相等的两个对象,比如[]===[],{}==={}均为false,而函数的比较最为复杂,楼主写的两个自执行函数均无返回值,浏览器便取默认值(不是undefined就是null了,实际上undefined==null)去比较,自然相等;

  • qq_青年你好_0
    2018-07-07 11:27:04

    这里的函数执行,比较其实比较的是执行后的结果,自然相等。如果不执行,两个引用类型的值是不相等(内存地址不相同。)

  • qq_最初的梦想_6
    2015-11-17 22:14:26

    好像没回答到正题上(===。。。拜托),函数自执行的方法太多了,但绝对没有完全等价的;关于函数自执行Xfunction(){}();其中的X你只要取任何使该语句不违法的值都可以达到函数自执行(语言就是这么规定的,别问为什么),比如:1?function(){document.title='hello word'}:null;

  • 月蚀
    2015-10-16 16:19:32

    实验了 效果是直等于 返回值true

  • Fankeke
    2015-09-28 17:22:39

    (function(){ alert("test1"); }());

    (function(){ alert("test2"); })();

    alert((function(){ alert("test1"); }())===(function(){ alert("test2"); })());

    浏览器中执行以上代码结果:test1,test2,test1,test2,true。

    个人认为,执行效果等价但“===”判断应为错才对啊