这之间的区别是什么......
(function () {})() === (function () {})()
// => true
这......
(function () {}) === (function () {})
// => false
先前的比较评估为true
,而后者评估为false
。那是为什么?
答案 0 :(得分:8)
(function () {})()
是IIFE(立即调用的函数表达式)。这意味着,它是一个立即执行的函数,它的实际值是return
值。此函数没有return
语句,因此值为undefined
。 undefined === undefined
为true
。
(function () {})
然而,是一个功能。函数不是原始值,而是像对象一样。在JavaScript中,比较对象(或函数)时,会比较引用。因为两个(function () {})
都创建了一个 new 函数,所以这些函数不是相同的,因此比较产生false
。
答案 1 :(得分:5)
在第一种情况下,
(function () {})() === (function () {})()
你创建两个不同但相似的功能对象;执行它们然后比较它们的结果。由于这两个函数都没有明确地返回任何内容,因此默认情况下JavaScript将返回undefined
。所以,这实际上变成了
undefined === undefined
在第二种情况下,
(function () {}) === (function () {})
你创建两个不同的,但是类似的函数对象并进行比较。仅当两个函数对象相同时,===
运算符才会返回true。由于它们在这种情况下不同,因此返回false
。让这种比较返回true的唯一方法是比较相同的函数,比如
var func = (function () {});
console.log(func === func);
// true