Зачем кому-то это делать
function() { return(abc || abc || "") }
разве недостаточно просто return(abc || "")
?
Вы правы, в любом хоть сколько-нибудь серьезном коде достаточно будет просто return abc || ""
.
Единственная ситуация, в которой return(abc || abc || "")
может привести к другой логике, — это если вы находитесь внутри with
или если abc
является геттером в окне — и это может произойти только в том случае, если кто-то намеренно пишет запутанный код.
let count = 0;
Object.defineProperty(window, 'abc', { get: () => count++ });
const result = abc || "";
console.log(result);
let count = 0;
Object.defineProperty(window, 'abc', { get: () => count++ });
const result = abc || abc || "";
console.log(result);
Шутки в сторону!!! Теперь мы должны думать и об этом случае getter
каждый раз, когда собираемся использовать logical train
. :-) Кстати, хорошее напоминание. Это javascript
.
мне потребовалось несколько секунд, чтобы понять, что в этом случае значение
abc
будет иметь другое значение каждый раз, когда оно будет оцениваться, потому что это не просто переменная, а было определено как свойство объекта окна с прикрепленной к нему функцией получения. Итак, когда пришло время оценить операторabc || abc
, первыйabc
возвращает0
, а второйabc
возвращает1
, составляя выражение0 || 1
. Я добавил этот комментарий для дальнейшего разъяснения и чтобы поблагодарить вас за эту замечательную демонстрацию.