1 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 05:16:18.29 ] 《ECMAScriptを語るスレ》 1. - 概要 - ECMA-262規格として知られる言語(通称 ECMAScript)についての利用法や言語仕様、 その他四方山話をするスレです。 Standard ECMA-262 ECMAScript Language Specification Edition 5.1 (June 2011) 標準規格(英語) www.ecma-international.org/publications/standards/Ecma-262.htm Annotated ECMAScript 5.1 es5.github.com/ Draft Specification for ES.next (Ecma-262 Edition 6) wiki.ecmascript.org/doku.php?id=harmony:specification_drafts Under Translation of ECMA-262 3rd Edition (日本語訳) www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/ ■前スレ ECMAScript デス 3 toro.2ch.net/test/read.cgi/tech/1190160481/ ■過去スレ JavaScript デス pc5.2ch.net/test/read.cgi/tech/1052273054/ ECMAScript デス 2 pc11.2ch.net/test/read.cgi/tech/1088298991/
548 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 20:11:08.24 ] 'use strict'; var a = 1; function hoge() { // ↓グローバル変数にアクセスするつもり console.log(a); // => undefined (巻き上げの為) var a = 2; // aを使う処理 }; -------- let a = 1; function hoge() { // ↓グローバル変数にアクセスするつもり console.log(a); // => 1 (のはず未確認) let a = 2; // aを使う処理 }; と直感的になるから使う直前で宣言するで問題無いよ
549 名前:デフォルトの名無しさん [2014/02/21(金) 06:02:18.19 ] >>548 あくまで変数はスコープに属する つまり正確には変数の存在は巻き上がるというかスコープに浸透する 但し宣言箇所までに使おうとするとエラーになる だからletさえあれば必ずしも良く書けるというわけでもない 特にfor文ではletは一見凄くいい 最近Cと同様に毎ループスコープコンテキストを生成するようになった これでfor文中でのクロージャ生成がグッとよくなる ただしその影響でパフォーマンスに影響があるかもしれない 理論的にはループ中にスコープコンテキストを保持するものがない場合 コンテキストを生成しなくて済むが、実際最適化が進むのは時間かかる いずれにせよ、letはキチッとしたイメージで使っていくべきだと思う >>547 のような場合は、もし使う直前で宣言するのなら それはそれ以前に変数を使っていた場合にエラーにしたいからという理由に自ずとなる だがもし>>548 のように見えて、キチッとしてないと思うのならブロック文の最初で宣言すべき ただ大半のケースであろう、そのスコープだけで下位のスコープでは使わない場合 一気に宣言と代入をした方がコンパクトでいいとは思う 場合によっては先頭にする、また場合によってはvarも使うというように 個人的ポリシーのもと綺麗に使い分けるか、思い切ってvarを捨てて letのその場宣言に統一するか、どちらがいいかは分からない
550 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 10:47:15.29 ] 変数の定義は出来る限り後にするってのはEffectiveC++にも書いてある事だし let,constを使ってる限りはその習慣のままでよくなったって事でいいよ
551 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 17:51:36.53 ] ES6ってEffectiveC++まで読まないと使いこなせないのか…
552 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 23:03:38.54 ] >>551 んなわけない C++の人がJS のヘンテコな仕様を気にしなくてよくなっただけだ
553 名前:デフォルトの名無しさん [2014/03/20(木) 20:37:22.08 ID:OnvdowAM] ES7+に関するニュースがたまってきた まずObject.observeがChrome M35でデフォルト有効になるね つまり日本時間の4/1からES7の時代なわけだ、素晴らしい それからES6に摂りこぼしたようなメソッドが入ってくる esdiscuss.org/topic/object-entries-object-values まあこういうのは仮にES7になっても、すぐ実装される可能性が高いか あと興味深かったのはASTならぬCSTについて esdiscuss.org/topic/concrete-syntax-tree これが標準APIとして入ると、最近2chでもよく耳にするJSのコード分析ツールが発達するだろうね
554 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 10:34:50.10 ID:BAtZ8TGv] Microsoft、プログラミング言語“TypeScript”を正式リリース ttp://www.forest.impress.co.jp/docs/news/20140403_642703.html
555 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 00:52:27.92 ID:FOzpDrfL] しかし、letが使えない事が最もイラつく要因だな これだけは間違いなく設計ミスと言わざるを得ない はやいとこletが当たり前のように使えるようになってほしいよ
556 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 04:17:27.66 ID:m4NkAp8y] Let it be.
557 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 06:30:34.96 ID:IOWbf8hT] なんでそんなもんが要るのか理解に苦しむ
558 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 07:34:51.39 ID:/1bv/NFj] letって糖衣構文だよね?
559 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 09:05:12.45 ID:N/wOneBP] letをラムダ式で書くのは一般に可読性がすごく悪いので、letがラムダ式の糖衣構文であることは 間違いないけど、良い糖衣構文の典型例と言っていい。 おまけにJSのラムダ式は function とか無駄にキーワードも長いし(funcで十分ですお)。
560 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 09:28:02.77 ID:dytsHLSj] そもそもムダ式の使いどころがわからないw
561 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 10:45:40.07 ID:/1bv/NFj] (function って書きかたするだけで即時無名関数だってわかるし、可読性悪いと思わないな。 とはいえletは便利だと思う。
562 名前:デフォルトの名無しさん mailto:sage [2014/04/27(日) 10:16:14.38 ID:J+hFW2BD] 架空の構文を使うが、 let (a = a に与える値, b = b に与える値) { a とか b とかを使ったプログラム片 }; ↑コレが、こうなる↓ (function (a, b) { a とか b とかを使ったプログラム片 })(a に与える値, b に与える値); 可読性は大幅に違うと思うが?
563 名前:デフォルトの名無しさん mailto:sage [2014/04/27(日) 12:50:33.35 ID:dzdj67m/] var使えばいいじゃん
564 名前:デフォルトの名無しさん [2014/04/27(日) 16:49:18.92 ID:/n7QikUK] varか
565 名前:デフォルトの名無しさん mailto:sage [2014/04/27(日) 16:58:01.12 ID:ZSKa5kXO] バーカと言ってんのか。
566 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 07:32:48.30 ID:pTdZCSXw] perlみたいにmyにすればvarより一文字タイプする手間が減って 人類全体ではおそらくのべ何百万時間と何百テラバイト節約できたのに。
567 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 10:37:13.73 ID:nTejnWG/] そこでさらに1文字減らそうと考えないお前はとことん子供だな
568 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 12:21:34.72 ID:6N4YFPM8] >>556 今なら let it go だな
569 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 01:06:54.91 ID:AbmpH0cg] >>567 phpの$はすばらしいな!え、ちがう?
570 名前:デフォルトの名無しさん [2014/04/29(火) 20:33:54.13 ID:pZyrXbny] class構文書く時@@createとconstructorの役割の割り振りが難しそうだな Arrayとか標準クラスを参考にすると@@create()ではそのクラスのインスタンスたり得る未初期化のオブジェクトを構築する つまり例えばArrayならlengthや自然数がハックされた(Proxy)オブジェクトを作り、prototypeの継承もここでする この時点で、obj.isClass()はtrueになるべきだが、まだオブジェクトが使える状態であってはいけない その次にconstructor()で、this.isClass()がtrueならば実際の初期化を行い、使える状態にする this.isClassがfalseまたは、初期化済みのインスタンスが渡された場合はエラーにする 逆にconstructorでオブジェクトをそのクラスのインスタンスたらしめる処理を行ってはいけない 例えば、内部的に使用するプロパティを新しく作成してはいけない 内部プロパティは@@create()でundefinedの値を入れて作っておき、constructor()ではそこに入れるだけにする これを常に守っているクラス間では、多重継承や多重継承元オブジェクトの作成など柔軟性の高さを確保しつつ、安全なクラスシステムが定義できる 一方自由が好きな人でも、@@createを使いこなすことで自分好みのクラスシステムを再定義できる 例えば〜.prototype.〜は長いから〜.$.〜にしようとかも超容易にできる
571 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 21:23:55.12 ID:/EtEvdEl] JavaのJavaScriptが更新されたね
572 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 00:26:41.76 ID:IHaPgo2n] ES6のイテレータってJava8のStreamAPIみたいなメソッド無いの?
573 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 22:34:29.48 ID:fV0QO8N6] マイクロソフト、IEの新機能紹介サイト「status.modern.ie」を正式版に www.atmarkit.co.jp/ait/articles/1405/29/news127.html