ES2015(ES6)の即時関数は短く書けるしletならそもそも不要

ES2015(ES6)の即時関数は短く書けるしletならそもそも不要

ES2015(ES6)の即時関数

たまにES2015(ES6)を使用しているのに即時関数をこのように記述しているコードを見かける。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var a = 'foo';
var b = 'bar';
 
(function() {
  var a = 1;
  var b = 2;
  function add(a, b) {
    return console.log(a + b); // => 3
  }
  add(a, b);
})();
 
// ここはfoobarを出したい
console.log(a + b); // => 'foobar'

サンプル1

即時関数にもアロー関数が利用できるため下記のようにすればもっと短く書ける。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var a = 'foo';
var b = 'bar';
 
(() => {
  var a = 1;
  var b = 2;
  function add(a, b) {
    return console.log(a + b); // => 3
  }
  add(a, b);
})();
 
// ここはfoobarを出したい
console.log(a + b); // => 'foobar'

サンプル2

さらに引数がないのであればletを使用すれば関数自体がいらなくなるためさらに短く書ける。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let a = 'foo';
let b = 'bar';
 
{
  let a = 1;
  let b = 2;
  function add(a, b) {
    return console.log(a + b); // => 3
  }
  add(a, b);
}
 
// ここはfoobarを出したい
console.log(a + b); // => 'foobar'

サンプル3

以上、ES2015(ES6)では必ずletを使用しようのコーナーでした。