質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1354閲覧

let var どちらを使うか

maleon

総合スコア13

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2021/01/02 12:42

—質問:letとvar、実務で使われるのはどちら?—
・質問者は実務未経験だが、将来エンジニアになりたい。
・実務でのスタンダードを知りたい。

—質問の背景—
・変数の定義では、varではなくletを推奨、と、いくつかのソースで聞いた。
・ホイスティングにおいて、両者の間で挙動の違いが出ると知った。letを推奨するのは、varの使用で予期せぬエラーが生じないように、と理解している。
・学習のため色んなサイトを見るが、最近更新されたサイトでも、varを使ったコードをたくさん目にする。むしろletより見かける気がする。
・「ホントにlet推奨なの?」と疑問に思った次第。

—質問者なりの仮説—
varをよく見かけるのは…
・長くjsに親しんできたエンジニアにとって、varの方が馴染み深い?使いやすい?
・質問者が知らないor勘違いしてるだけで、varの方が便利だったり?
・jsは長い期間各種webサイトで使われている。当然ES5以前のコードも使用されてると考えると、varを使う機会の方が多い?

実務でjsに携わってきた方!ご意見いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

環境によっては、varで書かざるを得ない場面もあります。

Node.jsやIE(11でもletの挙動は完全ではありません)を対象とするコードを直接(トランスパイルを挟まずに)書く場合には、letを認識しない、あるいは意図通りに動作しない場面があります。

トランスパイルを挟む場合には、トランスパイラが適切に処理してくれるので、基本的にletだけで構いません。

・質問者が知らないor勘違いしてるだけで、varの方が便利だったり?

1つだけletで書けないことがあって、トップレベルでvar foo;のように宣言した変数を、ブラウザ内であればwindow.fooのようにグローバルオブジェクトから参照できる、ということがあります。もっとも、現代的なJavaScript環境では、トップレベルにコードを置くこと自体がそうそうないので、あまり気にする必要はありません。

あと、var foo, foo; var foo;のように、varでは同じ変数を何度も宣言できますが(2つ目以降の宣言は無視されるだけなので、あえて書く意味は皆無)、letではできません。

投稿2021/01/02 13:01

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/01/02 13:03

> 学習のため色んなサイトを見るが、最近更新されたサイトでも、varを使ったコードをたくさん目にする。 筆者の認識が更新されていないだけ、あるいは新機能の追加だけで既存のコードのvarを変えるのに手が回っていないだけかもしれません。
miyabi_takatsuk

2021/01/02 14:43 編集

Androidも、 Android OSと、Android Google Chromeのバージョンが連動しないパターンがあり、 OSがある程度新しくても、 Chromeのバージョンが低くて、let宣言が動作しないことがあります。 OSが5系以降でも、 Chromeのバージョンは44だったりというパターンが存在します。 (let宣言対応は、Android Chrome バージョン46以降だったはず)
maleon

2021/01/03 05:57

maisumakunさん miyabi_takatsukさん ご回答、コメントありがとうございます! node.jsでも`let`は使えないんですね。 `let`の誕生後に学習を始めたので、正直`let`は当たり前に使えるもの、というイメージです。 しかし、まだ非対応の環境もあるわけですね。 自分はひとまず、`let`を使っていくことにします。
miyabi_takatsuk

2021/01/03 12:43

> node.jsでも`let`は使えないんですね。 違います。 使えないわけではありません。 ECMAScriptの仕様に準拠し切れていない場合があるだけです。 そのため、意図しない動作になる場合があるということです。
maisumakun

2021/01/03 22:34 編集

「古い」Node.js、と書いたつもりが、抜け落ちていました。最新版を前提とするなら無問題です。
maleon

2021/01/04 04:18

ご教示ありがとうございます。 利用の際は、バージョンをよく確認するよう意識します。
guest

0

ベストアンサー

圧倒的let派です。
なぜか。IDEが「var使うな!constlet使え!」とうるさいからです。
イメージ説明

「そんくらいのエラー、非表示にすればいいじゃん」「IDEにそんなに従うのか?」というご意見が飛んできそうですが、自分の場合はvarを使うメリットって全くないです。だから、IDEに従ってます。
maisumakunさんがおっしゃっているデメリットの中にある、IE11・旧Edge対応案件はなかなかないですし、あったとしてもトランスパイルしてるのでさほど気になりません。

投稿2021/01/02 15:19

編集2021/01/02 15:20
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maleon

2021/01/03 05:47

kyoya0819さん ご回答ありがとうございます! IDEがエラーを出すくらいなら、varは非推奨、という認識では良いのでしょうね。 トランスパイルなる技術があるんですね。恥ずかしながら知りませんでした。 IEやEdgeのシェアは低いようですし、自分は今後もletを使うことにします。
guest

0

—質問:letとvar、実務で使われるのはどちら?—

挙動が違うので、普通に「求められる機能(主にスコープ)」で判断して使用すると良いです。

参考)
let - MDN

ただ今どきのプログラミングでは var の出番は少ないかと。
あと、const も同じくくりなので併せて理解することをオススメします。

投稿2021/01/03 23:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maleon

2021/01/04 04:16

te2jiさん ご回答ありがとうございます! 基本的にletを使い、必要性がある時はvarを使います。 ES5以前のコードを読むこともあるかと思いますし、const含め挙動や違いは理解するよう努めます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問