Нет хорошего способа, которым javascript мог бы определить, что верно следующее: -
fn(x) == fn(x);
Даже если бы это было возможно, вызов второго fn
мог бы быть действительным только в том случае, если можно было гарантировать, что fn
не имеет других побочных эффектов. Если между вызовами на fn
есть другой код, это еще сложнее.
Следовательно, у движков Javascript нет другого выбора, кроме как на самом деле вызывать fn
каждый раз, когда он вызывается.
Затраты на вызов $ () довольно малы, но не незначительны. Я бы, конечно, держал результат в локальной переменной, как вы делаете.