JSFiddle - React, Tailwind, and code Playground
HTML
<!-- Examples of when functions are considered 'equal' by JS -->
<div id="out"></div>
JavaScript
function foo() { }
var foo1a = foo;
var foo1b = foo;
var foo2 = function () {}
var foo2b = foo2;
function getFoo3s() {
return function() {};
}
var foo3a = getFoo3s();
var foo3b = getFoo3s();
function SomeClass() {
this.foo5 = this.foo5.bind(this);
}
SomeClass.prototype.foo4 = function () {};
SomeClass.prototype.foo5 = function () {};
var sc1 = new SomeClass();
var sc2 = new SomeClass();
function getFoo6es() {
var ret = [];
for (var i=0;i<3;i++) {
ret.push(function () {});
}
return ret;
}
var foo6es = getFoo6es();
function out(str) {
document.getElementById("out").innerHTML += "<div>" + str + "</div>";
}
out(foo === foo); // true - same reference
out(foo1a === foo1b); // true - same reference, same closure
out(foo2 === foo2b); // true - same reference, same closure
out(foo3a === foo3b); // false - different closure
out(SomeClass.prototype.foo4 === sc1.foo4); // true - inst doesn't overwrite proto
out(SomeClass.prototype.foo5 === sc1.foo5); // false - bind() creates a different fn each time
out(sc1.foo4 === sc2.foo4); // true - same proto ref
out(sc1.foo5 === sc2.foo5); // false - bind() creates a different fn each time
out(foo6es[0] === foo6es[1]); // FALSE - same closure, but literal is evaluated twice