# ES6機能紹介: let宣言, const宣言

**URL:** <https://community.cybozu.dev/t/topic/598>\
**Category:** kintone 開発相談\
**Created:** [2017 年 11 月 1 日午前 8:03 UTC](https://community.cybozu.dev/t/topic/598 "2017-11-01T08:03:25Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account2115](https://avatars.discourse-cdn.com/v4/letter/l/e9bcb4/32.png) [@Legacy\_Account2115](https://community.cybozu.dev/u/Legacy_Account2115)\
**Post date:** [2017 年 11 月 1 日午前 8:03 UTC](https://community.cybozu.dev/t/topic/598/1 "2017-11-01T08:03:25Z")

</div>

このナレッジノートでは、先日[投稿した記事](https://community.cybozu.dev/hc/ja/community/posts/115019272103-)に引き続いて、kintoneのカスタマイズ開発に役立つモダンなJavaScript仕様ECMAScript 6の機能に一部について解説します。ここではlet,const宣言について解説します。

# let宣言

`let`宣言はブロックスコープを作る変数宣言です。

```
let a = 1;

```

とすると、同じブロック内では再宣言ができず、別のブロックからは参照できなくなります。

```
var i = 100;
if(i > 10) {
  let b = i + 10; 
  console.log(b); // output: 110
}

console.log(b); // output: undefined

```

## const宣言

`const`宣言は宣言した変数を再代入不可にします。定数を定義するときに用いると良いですね。

こちらもブロックスコープを作り、同じブロック内では再宣言が出来ず、別ブロックからの参照は出来ません。

```
const a = 10;

a = 20; // TypeError

```

## 各宣言の特徴

今までの`var`宣言では、変数のスコープは宣言された関数内となり、関数あるいはグローバルの一番上に宣言が巻き上げられます。  
よって以下のような記述が可能です。

```
console.log(a); // output: 1

var a = 1;

```

一方`let`及び`const`では、宣言文より前で変数にアクセスした場合、エラーとなります。

```
console.log(a); // Error

let a = 1; // constでも同様

```

また、`let`及び`const`宣言では同一ブロックからの再宣言が出来ないため、同じ名前の変数を別の意味合いで再宣言してしまうなどミスを避けられて非常に便利です。  
ES6以降の記法が使える環境では特殊な理由がなければ`var`を使わず、`let`を使うことをおすすめします。
