◆ using を使ってどこかで見たような感じにスコープを作ります
◆ 無名関数の即時実行より見やすいし使いやすいはず 

前のの進化形です

前のは
function something(){
!function a(){

}()
!function b(){

}()
}
こんな感じでスコープ作るとか書きましたが 書くのも面倒だし なにか違うです

では 進化版です

まず
function using(...args){
var fn = args.pop()
return fn(...args)
}
を用意しておきます
スコープを作りたい時に using を使って
using(1,2,3, (a,b,c) => {
console.log(a,b,c)
})
// 1 2 3 4

このように書きます
どこかの言語に似た構文があった気がしますし 使ってみても結構便利です

こういう一時変数が出る処理があるとき
var str = "a-b-c-d-e"

var tmp = str.split("-")
var last2 = tmp[tmp.length-2]
last2
// d

こう書けます
var str = "a-b-c-d-e"

var last2 = using(str.split("-"), arr => {
return arr[arr.length-2]
})
last2
// d

行数も書く量も増えてますね
それでも tmp みたいな変数が残ると後で見るときに どこで使ってるのか確認が面倒です
関数が長いと特に必要ない変数がいっぱい同じスコープに並ぶと困ります

let とブロックスコープでもいいのですが スコープの中がちょっと長くて 外側にデータを返すタイプだと 外側の変数見えるからってあちこちで外側を書き換えるとこれまた見づらくなるので関数にして最後で return するのが綺麗かなーと思います

まだ Chrome で動かないですが
var [a,b,c] = using(x(), y(), (x, y) => {
return [x+1, y+2, x+y]
})
配列受け取りで こんな書き方もできます

おまけ

using の定義を
function using(...args){
var fn = args.pop()
var result = fn(...args)
args.forEach(e => e && e.close && e.close())
return result
}
とすればもっとどこかで見たような 処理が終わったら自動で close をしてくれるものになります