using でスコープを作る
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ using を使ってどこかで見たような感じにスコープを作ります
◆ 無名関数の即時実行より見やすいし使いやすいはず
◆ 無名関数の即時実行より見やすいし使いやすいはず
前のの進化形です
前のは
では 進化版です
まず
スコープを作りたい時に using を使って
このように書きます
どこかの言語に似た構文があった気がしますし 使ってみても結構便利です
こういう一時変数が出る処理があるとき
こう書けます
行数も書く量も増えてますね
それでも tmp みたいな変数が残ると後で見るときに どこで使ってるのか確認が面倒です
関数が長いと特に必要ない変数がいっぱい同じスコープに並ぶと困ります
let とブロックスコープでもいいのですが スコープの中がちょっと長くて 外側にデータを返すタイプだと 外側の変数見えるからってあちこちで外側を書き換えるとこれまた見づらくなるので関数にして最後で return するのが綺麗かなーと思います
まだ Chrome で動かないですが
前のは
function something(){
!function a(){
}()
!function b(){
}()
}
こんな感じでスコープ作るとか書きましたが 書くのも面倒だし なにか違うです!function a(){
}()
!function b(){
}()
}
では 進化版です
まず
function using(...args){
var fn = args.pop()
return fn(...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
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 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
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]
})
配列受け取りで こんな書き方もできます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 をしてくれるものになります
var fn = args.pop()
var result = fn(...args)
args.forEach(e => e && e.close && e.close())
return result
}