这两个比较之间的区别是什么?

时间:2015-10-26 03:07:31

标签: javascript function

这之间的区别是什么......

(function () {})() === (function () {})()
// => true

这......

(function () {}) === (function () {})
// => false

先前的比较评估为true,而后者评估为false。那是为什么?

2 个答案:

答案 0 :(得分:8)

(function () {})()

是IIFE(立即调用的函数表达式)。这意味着,它是一个立即执行的函数,它的实际值是return值。此函数没有return语句,因此值为undefinedundefined === undefinedtrue

(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