タグ

ブックマーク / js-next.hatenablog.com (5)

  • 末尾呼び出し最適化が実装された - JS.next

    概要 ある関数Aから別の関数Bを呼び出すとき、処理系は後で戻って来れるように一旦Aの状態を保存し、関数Bの処理に入る。 これが問題になるのは再帰の時で、数万回程度の再帰でスタックが一杯になり、エラーとなってしまう。 しかし、もし関数B呼び出しの際に、関数Aに戻ってきて処理を続ける必要のない形で呼びだされていれば、 状態の保存を省略して関数Bに移行する最適化が可能であり、ES2015でその詳細が定義されることとなった。 例 具体的には、strictモードの関数で、「 return fn() 」という形での呼び出しについて最適化が有効になる。 最適化が効く例: function fn( n ) { 'use strict' if ( n <= 0 ) { return 'done!' } return fn( n - 1 ) // この関数がする処理はこれ以上ない } fn( 1e6 ) //

    末尾呼び出し最適化が実装された - JS.next
    lEDfm4UE
    lEDfm4UE 2016/01/30
  • Proxyについて - JS.next

    概要 Proxyを使うとオブジェクトに対する様々な操作に割り込み、好きな振る舞いをさせることが出来る。 記事更新履歴 [2016/03/23] ES2016でenumerateトラップが削除されるのに対応 [2015/12/02] 公開 APIの概要 提供されるメソッド new Proxy( target<Object>, handler<Object> ) -> <Proxy> // targetオブジェクトを基盤としたプロキシを作る // プロキシへの操作を受ける関数を入れたhandlerオブジェクトを指定する Proxy.revocable ( target<Object>, handler<Object> ) -> { proxy<Proxy>, revoke<Function> } // 無効化可能なプロキシをproxyプロパティに持ち、 // 無効化するためのrevokeメソッ

    Proxyについて - JS.next
    lEDfm4UE
    lEDfm4UE 2015/12/12
  • テンプレートリテラルが実装された - JS.next

    概要 テンプレート文字列を記述できる構文が実装された。 テンプレートリテラル 基の使い方 バッククオート『 ` 』で囲んだ文字が、文字列リテラル同様に文字列として評価される。 var t = `テンプレート` var s = "テンプレート" console.log(t) // "テンプレート" console.log(t == s) // true 改行がそのまま認識される。 var t = `テンプ レート` var s = "テンプ\n"+ "レート" console.log(t) // "テンプ⏎レート\t" console.log(t == s) // true 文字列中に変数などを埋め込む リテラル中の『${』と『}』で囲まれた部分は式として評価される。 var n = 123, f = () => 339 var t = `0${ n }45${ f() * 2 }9` v

    テンプレートリテラルが実装された - JS.next
  • String.prototype.normalizeが実装された - JS.next

    実装されたメソッド String.prototype.normalize(form = "NFC") form(初期値:"NFC")の形式で正規化した文字列を返す 詳細 複雑な文字は、一文字に見えても、文字コード上は複数の構成文字から成り立っている場合がある。 例えば、『が』(濁点付き平仮名か)と、『か』(平仮名か) +『゛[U+3099]』(合成用濁点)は、 同じ意味を持ち同じように見えるが、文字コードが異なるためそのままではプログラム上では異なる文字列として扱われてしまう。 ga_NFC = 'が' // 'が' ga_NFD = 'か\u3099' // 'が' escape(ga_NFC) // '%u304C' escape(ga_NFD) // '%u304B%u3099' ga_NFC.length // 1 ga_NFD.length // 2 ga_NFC == ga_

    String.prototype.normalizeが実装された - JS.next
  • Promiseについて - JS.next

    概要 Promiseとは非同期処理を上手く扱う為のAPIであり、パターンである。 非同期の処理の完了後に続けて処理を行いたいとき、よくコールバックパターンが使われるが、処理が連続するとコールバック地獄と言われる分かりづらいソースコードになってしまう。 また、複数の非同期処理が完了した時に処理を行うなど、コールバックパターンでは難しい事をスマートにできるのがこのPromiseである。 今まではDOMの方でDOM Promiseとして仕様策定が進められていたり、ライブラリのDeferredが有名だったが、ES2015標準に入ることになり、V8に実装された。 実装されたメソッド Promise.resolve(x) Promise.reject(x) Promise.all( [p1, p2, p3, ......] ) Promise.race( [p1, p2, p3, ......] )

    Promiseについて - JS.next
  • 1