===
проверяет значение (если объект является числом или логическим), тип и ссылка на объект. Если вы создадите 2 объекта с одинаковыми атрибутами, такими как следующее, он вернет false:
let a = { test: 'test' };
let b = { test: 'test' };
console.log(a === b); // gives false
, потому что это не та же ссылка. Таким образом, в вашем случае selectedHero === hero
будет истинным, если ваши 2 объекта имеют одинаковую ссылку.
EDIT:
Еще одна точность заключается в том, что вы можете скопировать ссылку на объект в другую:
let a = { test: 'test' };
let b = a;
console.log(a === b); // gives true
, а затем, если вы измените атрибут одной ссылки, она изменится для обоих:
let a = { test: 'test' };
let b = a;
a.test = 'foo';
console.log(b.test) // gives foo
Вызывающая сторона выдвигает аргументы в обратном порядке, в соответствии с x86 ABI, затем вызывает fun
. Инструкция call
помещает eip
в стек перед переходом к fun
. Затем вы устанавливаете свой кадр стека, делая ebp
вершиной стека, поэтому arg1 должен быть на 8 байт выше кадра стека:
higher mem
+----------+---------+
| arg 3 | 4 bytes | push arg 3
+----------+---------+ (ebp + 16)
| arg 2 | 4 bytes | push arg 2
+----------+---------+ (ebp + 12)
| arg 1 | 4 bytes | push arg 1
+----------+---------+ (ebp + 8)
| ret addr | 4 bytes | call fun
+----------+---------+ (ebp + 4)
| old ebp | 4 bytes | push ebp; mov ebp, esp
+----------+---------+ <-------- (ebp + 0) STACK FRAME START
lower mem