Учу потихоньку сейчас JS. В этой связи читаю разные обучающие статейки и прочую лабуду. И постоянно слышу какую-то чушь про неочевидность. Неочевидность в JS действительно присутствует, в некотором смысле, это связано с приведением типов, но эти придурки находят неочевидность в таких местах, где ей и не пахнет.
Уже в тысячный раз, наверное, я слышу мантру о том, что объявление переменной внутри функции без var приводит к созданию/переопределению свойства глобального объекта с соответствующим именем. Какая-то плюсовая обезъяна когда то сказала, а другие попугаи повторяют. И рекомендуют при этом всегда использовать var внутри функции. Это полнейшая чушь.
Начнем с того, что так называемое «объявление без var» - это никакое не объявление без вар, это деструктивное присваивание. Оно изменяет не свойство глобального объекта, а значение переменной внутри локального скопа функции. Поскольку в этот скоп входят в том числе, глобальные переменные, она может переопределить и глобальную переменную, но вовсе не обязательно.
var a = 1;
var tst = function(){var a = 2; return function(){a=3}}();
tst();
console.log(a)// ---> 1