へえ〜
ES7のfeatureなので、正式に標準化されるのは2017年以降になると思われますが、babelでは--stage=0ですでに動くようです。
// hoge.js let x = 3 let y = do { let a = 1; var b = 2; a + b + x; } // console.log(a); // console.log(b); // do式はブロックスコープを作るのでaとbはここには無い console.log(y); let fn = do { let z = 4; let f = function () { return x + y + z; }; f } console.log(fn());
んで
babel-node --stage=0 hoge.js
結果
6 13
なるほどなるほど。トランスパイル結果を出力するとdo式は即時関数に置き換えられました。
以下のように書いてバベるとエラー
do { let a = 100; console.log(a); }
SyntaxError: piyo.js: Unexpected token (24:0) 22 | } 23 | > 24 |
これは do while 文が期待されるっぽいですね…。