Замыкания и Джаваскрипт
Все знают, что зона видимости в JS создаётся только внутри функций (если не брать в расчёт конструкцию «let» из JS 1.7):
var v = 5;
!(function() {
var v = 6;
})();
alert(v); // будет 5Я тут подумал, что ведь есть и второй способ (я
var x = 1, y = 0;
// конструкция «let», JS 1.7+
let (x = x+10, y = 5) {
alert(x+y); // 16
}
alert(x+y); // 1
// конструкция «with»
with ({ x: x+10, y: 5 }) {
alert(x+y); // 16
}
alert(x+y); // 1Не так уж и много отличий, только выражением «with» быть не умеет, но можно было бы и научить.
Комментарии 7
— первая фраза первой ссылки в Яндексе. То есть именно для таких манипуляций и придумана.
Только область видимости не создаётся, а перекрывается (на чтение) подсунутым объектом.
Я, наверное, пост совсем не понял.
Один из основных аргументов против with — непредсказуемость работы с переменными внутри него (объект может содержать свойство). В данном случае полностью контролируется список свойств объекта, и аргумент теряет свою актуальность.