Вместо вот этого недоразумения
;(function(){
var value = 0
increment = function(){value++}
decrement = function(){value--}
show = function(){console.log(value)}
})()
можно написать более изящно
with({ value: 0 }){
increment = function(){value++}
decrement = function(){value--}
show = function(){console.log(value)}
}
А вместо bind, которого, в свое время так долго вожделели некоторые, можно написать
o = {a: 1}
f1 = function(){console.log(this.a)}.bind(o)
with(o) f2 = function(){console.log(a)}
Хочу заметить, что во всех перечисленных случаях, использование with никак не сказывается на производительности, поскольку, существует только на момент опрделения.
Вообще, with — очень мощная, гибкая конструкция, естественная для семантики JS, органичная для него.
Предлагаю в этом треде постить всевозможные кейзы для with, это интересно, думаю, будет для многих, и познавательно.