【JavaScript 】【Chrome】let変数。chromeの"extended mode"
■topic summary
stude about "let" in JavaScript.and "extended mode" which is used in chrome.
ブロックスコープ変数let
let宣言で宣言した変数はブロックスコープです。
でもJavaScript の独自拡張らしく(ECMAScript第五版にはない)、
chromeではエラー。
let s=10; SyntaxError: Unexpected identifier
(追記)
AJさんからコメントをもらったよ!
AJさんすごいね。なんでこんなに詳しいのかな。
AJって何だろう。JはJavaScriptだとしても、Aってなんだろう。。
「厚焼き」とか?
厚焼きJavaScript?
ESとはECMAScriptのこと。
■ECMAScript6のサイトにてletが提案されている
Proposals
http://wiki.ecmascript.org/doku.php?id=harmony
let, the new var but block-scoped and with better use-before-set semantics (dherman,markm)
Wikiを確認してみる。
■JavaScript は1.7からlet機能が追加
http://en.wikipedia.org/wiki/ECMAScript
■JavaScript1.7 対応の各ブラウザVer
IEは11から対応。
ブロック スコープ変数
http://msdn.microsoft.com/ja-jp/library/ie/dn342892(v=vs.85).aspx
let と const という新しいキーワードを使うと、宣言する変数のスコープを変数を宣言したブロックに限定できます
しかしこの表はどう見ればいいんだろう。
http://en.wikipedia.org/wiki/JavaScript
FireFoxはJavaScript 1.7がVer2.0から対応と読めるけど、
実際はまだ1.7は未対応の様子。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/ECMAScript_6_support_in_Mozilla
たしかに、手元のFireFoxではletが認識されない。
フラグを有効にしたChrome
ってなんだろう?
chrome://flags/
で内部フラグを設定できるみたい!初めて知った。
このフラグだね。
「harmony」はES6の略称だから。
うーん。
フラグをONにして再起動しても、
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe --js-flags=--use-strict
起動オプションをつけても、
letが認識されない。。
うーん。。?
(追記)
あらためてAJさんからコメントをもらったよ!
だって!
すごいね。詳しいね?なんでだろう!??!
"strict mode"でしか使えないのか。。?
でもエラーメッセージは
SyntaxError: Illegal let declaration outside extended mode
って出るんだよね。。"extended mode"って。
どういうことか調べてみよう。
extended modeとは
V8(chromeのJavaScript エンジン)のソースglobals.h に解説が載っていた。
The extended mode is only available if the harmony flag is set. It is based on the 'strict mode' and adds new functionality to it.
https://code.google.com/p/v8/codesearch#v8/trunk/src/globals.h&q=%22extended%20mode%22&sq=package:v8&type=cs&l=381
なるほどね。
extended mode はstrict mode を包括したモードなんだね。
V8のLanguageMode には以下の3種類が存在するんだね。
enum LanguageMode { CLASSIC_MODE, STRICT_MODE, EXTENDED_MODE };
謎が解けたところで、strict modeの使い方はmozillaに書いてある。
you're chrome code, or you've used the right <script type="">) and is strict mode code
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode
ふむふむ。。
<script type="">を明示しないといけないのか。
Chromeでletを使う
改めて纏めてみよう。
せっかくAJさんに教えてもらったし。
スクリプトを作成
<script type="">を明示したファイルを作成。
今はhtmlファイル。
"use strict"を先頭に書くことでstrictモードを宣言。
■aaajs.html
<script type="text/javascript"> "use strict"; { let hoge="kkK"; console.log(hoge); } console.log(hoge); </script>
ファイルの実行
できたー。
やったー。
今月19-21日の会議で仕様が固まる
ってなんだろうね?
さすがにこれは調べても分からなかった。
AJさんって何者なのかなー。。。厚焼きJavaScript 。。?