これですね。これ何か呼び方あるの? なにこれ グローバル変数にならないようにする仕組み。 スコープ問題 JavaScriptではスコープ(変数の有効範囲)は関数単位(function(){~})になるのが基本。 そして一番外側、どの関数の中でもないものは「グローバルスコープ」に所属する「グローバル変数」となり、どこからでも利用できる変数になる。そうなるとどこかで変数の名前がかぶった際、勝手に値が変わったりして大変恐ろしい事になってしまう。 そこで、ファイル全体を関数で括る事でスコープを生成して、グローバルではない変数にしておこう、というもの。ただしvar宣言なしに変数を使い始めると、結局グローバル変数になってしまうので注意。 次世代JavaScriptだとletとかあるけど触れません、関係ないし。 関数の前後にくっついてる括弧は 関数は作成するだけでは何もならないので、即時実行してやります
キャメルケースの表記で、よく揺れるケースとその対策についてまとめてみました。プロジェクト内で表記を統一したい場合などに参考にしてみてください。No.3以降は、単語の区切りについてなので、snake_caseにも当てはまりますよ。 1. XMLParser – XmlParser これはよく揺れますね。XMLのようにそれぞれの頭文字 (Extensible Markup Language) を並べて作られた単語を頭字語と言います。頭字語は、それが頭字語だと言う事をわかりやすくするために、英文のルールではすべてを大文字にします。このルールとキャメルケースの表記法とが衝突しているので、人それぞれで書き方がバラツキます。 Rule ルールを作る場合は、英文ルールに従い頭字語はすべて大文字にするか、キャメルケースに従うか・どちらか一方にしなければならないのですが、単語によってしっくりくる書き方が違っ
setTimeout() vs ハッカー、仁義なき戦いによると function isNativeFunction(func, name) { for (var o in func) { if (o === "toString") return false; } var match = func.toString().match(/^function (\S+)\(\)\s*{\s*\[native code\]\s*}$/); return (match && match[1] === name); } setInterval = function(){}; isNativeFunction(setInterval, 'setInterval'); // false でsetIntervalが偽装されているか調べられると書いてあるが、そんなことはない。 自分が普段使っているブラウザはSa
概要 ES2015を象徴する機能である、アロー関数構文の実装がついにV8で始まった。 無名関数を短く書ける [3.28.31] アロー関数は無名関数の省略記法である。 今までこう書いていたのが、 var fn = function (a, b) { } こうスッキリ書ける。 var fn = (a, b) => { } 「=>」が矢のように見えることから「アロー」関数と言う。 更に短くできる これが、 [1, 2, 3].map( function (v) { return v * v } ) // [1, 4, 9] アロー関数だとこうなるが、 [1, 2, 3].map( (v) => { return v * v } ) // [1, 4, 9] 引数が一つの時には「()」を省略できるので、こう書ける。 [1, 2, 3].map( v => { return v * v } )
概要 かつてはfor文初期化句で宣言された変数は、for文の直前で宣言されたように振舞っていたが、各ループでスコープを引きづらないように仕様が変更され、V8も追従した。 例 for (let i = 0; i < 5; i++) { ~~~ } これは今までは次のコードと等価だった。 { let i = 0 for (; i < 5; i++) { ~~~ } } つまりfor文中で関数を定義するとこうなっていた。 let funs = [] for (let i = 0; i < 5; i++) { funs.push(function () { return i }) } funs.map(function (fun) { return fun() }) // [5,5,5,5,5] この結果が[0,1,2,3,4]になるのが今回の変更である。 つまり一番最初のコードはこれと等価になる
「HackerNews翻訳してみた」が POSTD (ポスト・ディー) としてリニューアルしました! この記事はここでも公開されています。 Original article: Partial Application in JavaScript using bind() by Pascal Hartig JavaScriptの中にはコードをもっとシンプルで見やすくできるパターンがあるのに、あまり使われていないものがあります。皆さんもFunction.prototype.bindはご存じでしょう。頻繁に使われていたvar that = thisやvar self = thisの代わりになる関数です。よくあるのが以下のような例です。 this.setup = function () { this.on('event', this.handleEvent.bind(this)); }; 第1引数が
Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...
setTimeout(fn, 0)より高速な関数は最近はこんな感じのを使うといいと思う。 var nextTick; if (typeof setImmediate === 'function') { nextTick = setImmediate; } else if (typeof process === 'object' && typeof process.nextTick === 'function') { nextTick = process.nextTick; } else if (typeof MessageChannel === 'function') { (function () { var channel = new MessageChannel(); var queue = null; channel.port1.onmessage = function () { t
JavaScriptの関数は「ファーストクラスオブジェクト(第一級オブジェクト)」である。なので、変数に代入したり、配列にセットしたり、他の関数に食わせたりできる。この変幻自在っぷりはすごい。newでコンストラクタになるところなんて変化の術のようだ。無名関数の即実行は影縫いの術みたいだし、callやapplyでthisの値を変えるとこなんて口寄せの術を彷彿とさせる。正に忍者 |--)ノシュッ==卍 変数に代入する var foo = function() {console.log('foo');}; foo(); 配列にセットする var fnList = [ function() {console.log('foo');}, function() {console.log('bar');}, function() {console.log('piyo');} ]; for(var i =
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く