为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

(function(){})();

但是我看到还有这种写法

(function(){}())

这两种写法等价吗

正在回答

5 回答

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

0 回复 有任何疑惑可以回复我~
#1

feibenren 提问者

非常感谢!
2015-11-18 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

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

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

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

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信