問題:どれが「クロージャ」でしょうか?

func1 から func10 までのどれが「クロージャ」でしょうか? var scope = "global"; function func1 () { return scope; } var func2 = function () { return scope; }; var func3 = new Function("return scope;"); function foo () { var scope = "functio…

回答:どれが「クロージャ」でしょうか?

問題:どれが「クロージャ」でしょうか? - hogehoge の回答期待させて申し訳ないですが、はっきりとした解等を定めていません。ということで解答ではなく、回答で。クロージャの定義を以下の様に定めました。 引数以外の変数を実行時の環境ではなく、自身が…

イベントハンドラの this と event.target, +α

[JavaScript]for 内でイベントリスナとか登録するときにやっちゃいがちな間違い. とその対処法を3つほど. | TM Life 対応その2: event.targetを使う と 対応その4 : this を使う について上記サイトで書いてあることが間違っているというわけじゃないんだ…

ECMAScript Proxy の get 時の注意点

658266 - [Harmony]Proxy: 'this' in getter/setter doesn't indicate the proxy object DirectProxyになる前に上げたバグ*1なのでちょっとコードが古いけど、回答が付いて気付かされた。Proxy通過時の this の問題 var obj, handler, proxyObj; obj = { _na…

ECMA-402 Internationalization API

Chrome 28 で ECMA-402 が実装されてたのを期に少し書いてみる。本当な Firefox Nightly でも一度は実装されたんだけど、バグがあったからか今はバックアウトしちゃって使えない。確認したバージョン: 28.0.1500.11 (Official Build 199640) dev-m Standard…

Firefox 21 個人的まとめ

ちょっとフライング気味だけど WebPlatform 系 Style[scoped] のサポート (Bug 508725) <main> のサポート (Bug 820508) window.crypto.getRadomValues (Bug 440046) Web Cryptography API[W3C] window.crypto.getRandomValues - Document Object Model (DOM) | MD</main>…

v8エンジンの __proto__ が getter/setter になってた

28.0.1500.3 (Official Build 198635) dev-mで確認以前確認した時はまだDataDescriptorだったから、また変更されたみたい。 > Object.getOwnPropertyDescriptor(Object.prototype,"__proto__") Object {get: function, set: function, enumerable: false, co…

s-bit, sticky-bit について

今更ながら、基本のおさらい s-bit (sビット) setuid, setgid のことで、そのファイルのオーナーまたはグループの権限で実行するただし、各オーナーやグループに実行権が付いている、かつ、実行するユーザが実行できるパーミッション(オーナーかグループか…

Firefox 20 個人的まとめ

システム内の E4X 無効化 javascript.options.xml.chrome Firefox 21 でこのオプションすら消える予定 for-each 文の事実上の無効化 コンテンツ上では<script type="text/javascript;version="1.6">等とバージョン指定しないと使えない Map.prototype keys, values, entries の追加 817368 - Map.prototyp…

switch と case のインデントレベル

主に2種類あると思う。 switch (expr) { case expr1: break; case expr2: break; default: // ... } と switch (expr) { case expr1: break; case expr2: break; default: // ... } ボクは、前者がお勧めだと思っている。jslint ? そんなの知りません。 vim…

ES.next Draft仕様より、普通のfunctionとArrowFunctionの違い

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

Firefox 22(Nightly) で ArrowFunction が実装されたが、扱いが難しい

Firefox Nightly (22) に ES6のArrow Function来たる - fragmentary ということで、早速試しているわけです。 基本 var f1 = () => "OK"; // 引数なしの場合は、"()"が必須 var f2 = arg => arg + 1; // 引数一つなら、"()"は省略可 var f3 = (arg1, arg2) =…

Object.setPrototypeOf を作る

https://mail.mozilla.org/pipermail/es-discuss/2013-March/029259.html で気付かされた。Firefox なら Object.setPrototypeOf を作ることができる。Firefox、というよりも、SpiderMonkey なのだが、Object.prototype.__proto__がgetter/setterで定義されて…

QUnit で ECMAScript 6th Compatibility Test を書いてみた

ECMAScript 6th Compatibility Test 既にECMAScript compatibility tableがあって、こちらは各UAでの結果あり、これはこれで良いのだが、イマイチ精度が良くないので、QUnit の練習も兼ねて現ブラウザでのテストコードを書いてみた次第。https://github.com/…

Symbol でプライベートな値を作る

ChromeのExperimental WebKit/JavaScript Features - fragmentary Experimental JavaScript Features の方に Symbol が使えると書かれていたので早速。Symbol ってのはなんて言うか、固有のプロパティのキーになれるもの?っていう説明で良いのかな。 var s …

Chrome Canary には document.webkitRegister があった

昨日はFirefox Nightlyにdocument.registerが実装されたって話を書いたが、もしやChrome Canaryにもあるんじゃ?と思って見てみたら、あった。 Bug 100229 - [Custom Elements] Implement bare-bone document.register() チェンジセット 143865 – WebKit た…

Firefox 22(Nightly) で WebComponents の document.register が実装された

783129 - Implement the document.register interface method mozilla-central: changeset 123773:871fea464883 カスタム要素が作れるようになった。DOM要素は単にDOM APIを呼び出すだけの存在だったのが、独自のメソッドとかを追加できるようにったわけで、…

ユニコード文字のbase64エンコード/デコード

今のところAPIがあるのが、Firefoxのみかもだけど。単純に、window.btoa("あいうえお")とすると、InvalidCharacterError: String contains an invalid characterと例外が発生する。Encoding StandardのTextEncoder、TextDecoderが使えるなら、以下のように書…

GoogleChrome(27.0.1425.2 dev-mあたり) の __proto__ 挙動が変わった

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

Array + Set で検索を高速に

Array#indexOf(item) !== -1をやって存在を確認するのが、どうにも速い気がしなくてやってみた。とりあえず、Array.indexOf vs Set.has · jsPerfで速度確認。Set#hasが圧倒的に速い。かと言って、単純な Set では以下の点で使いづらい 値の順番操作が面倒 入…

getEventListeners(node)

constructor.members_に使えるメソッド名一覧があることを発見して、getEventListeners(node)で、そのnodeでリッスンしているハンドラが取れる事を知った。デバッグに役に立ちそう。 参考 Command Line API Reference - Chrome Developer Tools — Google Dev…

JSON.parse('{"__proto__": null}')

var o = JSON.parse('{"__proto__": null}'); console.log( Object.prototype.hasOwnProperty.call(o, "__proto__"), Object.getPrototypeOf(o), o instanceof Object, Object.getPrototypeOf(o) === Object.prototype ); Browser hasOwnProperty instanceof…

__proto__の挙動からJavaScriptエンジン判定

function getJSengine() { if (!("__proto__" in Object.prototype)) { if (typeof Object.getPrototypeOf === "undefined") return "JScript(IE8-)"; else return "JScript(IE9+)" } var o = JSON.parse('{"__proto__":null}'); if (!(o instanceof Object)…

さようなら、E4X

788293 – Remove E4X from Spidermonkey mozilla-central: changeset 120561:c929583ba8ae 現NightlyのFirefox 21.0a1で──というよりSpiderMonkeyから──E4Xが削除された。(当然だけど)Firefoxからも、javascript.options.xml.chromeやjavascript.options.x…

HTTP プロトコルから CD-ROM トレイを取り出せる Firefox 拡張機能

Webサーバを立てると良く CD-ROM を取り出したくなりますよね。ならないとしたら、今すぐこの記事を読むのをやめて病院に行って下さい。 https://gist.github.com/4634841 追記:セキュリティリスクがあることが判明しました! <img src="http://localhost:8090/eject..."> 訪れたページに上記のようなも…

Firefox 21(Nightly) でオブジェクトのキー順序がES.nextで提案されているものに

今まで、FirefoxのJSエンジン、SpiderMonkeyでは、オブジェクトのキーの順序は定義された順だった。 var o = { 2: 0, 3: 1, a: "A", 1: 2, }; o[0] = 0; for (var key in o) { console.log(key + ":" + o[key]); } 2: 0 3: 1 a: A 1: 2 0: 0という感じ。いつ…

Firefox 20 から for-each 構文がコンテンツ上で事実上の死

804834 - Hide "for each" from content for each構文はE4Xの構文とはいえ、JavaScript 1.6から定義されたものなので、バージョン1.6以上を指定したもの以外は実行できなくしようというもの。791343 -disable for-each statement on javascript.options.xml.…

「メモリ使用量が4分の1になった」とかバカなことぬかすな!

Mozilla in 2012 | The Mozilla Blog 言いたいことは分かるよ。4x less memory usedのところを見て言っているんだろ?でもね、"*" つまり、※ただしイケメンに限る があることに気付かない? 小さいけど、For the memory power users with add onsって書かれ…

Object.defineProperty できなくなるケース

ES-Discuss のメーリングリストで知った。 Object.prototype.get = function(){}; var o = {}; Object.defineProperty(o, "hoge", { value: "OK" }); // TypeError: property descriptors must not specify a value or be writable when a getter or setter …

curl の multipart/form-data 送信が遅い

個人的メモローカルでサーバを立てて実験中、妙に反応が悪いので何でだろうと思ってた $ curl -V curl 7.27.0 (i686-pc-cygwin) libcurl/7.27.0 OpenSSL/1.0.1c zlib/1.2.7 libidn/1.25 libssh2/1.4.2 Protocols: dict file ftp ftps gopher http https imap…