16/02/02 09:26:09.35 .net
>>981
クロージャってググってもよくわからないんですが簡単に言うと何ですか?
1009:Name_Not_Found
16/02/02 09:47:59.30 .net
>>982
クロージャーとは、独自のブライベート変数を持った関数ですな。
1010:Name_Not_Found
16/02/02 09:57:32.73 .net
必ずしもクロージャ自身がプライベートな変数を持つわけではないだろう
1011:Name_Not_Found
16/02/02 11:49:32.39 .net
>>978,980
実装依存だからブラウザ毎にテストしなければならないはずだけど、IE,Fx,GC,Sa,Android GC,iOS Saの全てのブラウザで調べるの?
長時間とはどれぐらいの期間?
ぶっちゃけ、とてつもない手間がかかる作業量なので仮にデータを持っている人がいたとしても「無料で下さい」なんてずうずうしすぎて俺なら頼めないな
ここまでいくと非公開ノウハウの類でしょ
「有償でもいいので費用交渉に応じていただけませんか」と頼み込むレベルだと思うよ
1012:Name_Not_Found
16/02/02 11:57:15.90 .net
>>981
単純にクロージャで変数に閉じ込めると全てのインスタンスでプライベート変数が共有されてしまう
var Hoge = (function () {
var private_data;
function Hoge (data) { private_data = data; }
Hoge.prototype.foo = function foo () {
console.log(private_data);
};
return Hoge;
}());
var h1 = new Hoge(1), h2 = new Hoge(2);
h1.foo(); // 2
h2.foo(); // 2
WeakMap はインスタンスとプライベート変数を関連付ける機能として使えるので独立したプライベート変数を構築できる(>>967)
WeakMap と同じ事をやれば勿論できるけど、コード量が増えて少し面倒って事
1013:Name_Not_Found
16/02/02 12:01:34.77 .net
jquery.comのjsファイルを使いたいのですが、『 href=
1014:986
16/02/02 12:02:44.73 .net
>>986に追記。こう書けばクロージャ単体でプライベート変数を作れるのはわかる
function Hoge (private_data) {
this.foo = function foo () {
console.log(private_data);
};
}
var h1 = new Hoge(1), h2 = new Hoge(2);
h1.foo(); // 1
h2.foo(); // 2
ただし、インスタンスを生成する度に function foo が生成されてしまい、メモリの無駄遣い
function foo を外に追い出せば function foo が無駄に生成される事はないが、後で prototype 拡張が出来ないので美しくない
1015:Name_Not_Found
16/02/02 12:38:59.46 .net
function range(begin, end) {
for (let i = begin; i < end; ++i) {
yield i;
}
}
var evens = [i for each (i in range(0, 21)) if (i % 2 == 0)];
MDNにあるJavaScript1.7のサンプルをFirefoxで表示させようとしてるのですが動きません
コード的には問題ないと思うのですがFirebugには下のように表示されています
SyntaxError: missing ; before statement
yield i;
----↑
WikipediaによるとFirefoxの1.7への対応はバージョン2.0のようで
今のstableは44だと思うのでだいぶ昔に対応していると思うのですが
何がいけなくて動かないのでしょう?
1016:Name_Not_Found
16/02/02 13:34:21.82 .net
旧FxのJS1.x体系との互換性はES20xx体系の実装によって失われてる。
まず1つ、ジェネレータ関数は function * gfn(){}の形で宣言しなければならない。
次に、ステートメント前置型の配列内包は廃止された。
URLリンク(www.fxsitecompat.com)
後置型も少なくともES2017までには入りそうもないし、いつ廃止されてもおかしくないので使用厳禁。
1017:Name_Not_Found
16/02/02 13:35:51.56 .net
>>989
手元のFirefox44では動いたよ。
動かない原因は分からないけど、そのコードはFirefox独自の構文を使ってるから、こんな感じで標準的な文法で書くといいと思う。
function* range(begin, end) {
for (var i = begin; i < end; ++i) {
yield i;
}
}
var evens = [...range(0, 21)].filter(i=>i%2==0);
1018:Name_Not_Found
16/02/02 13:47:12.28 .net
>>991
レスありがとうございます
そちらのコードでは問題なく動作しました
標準的な書き方がわかりませんが頑張って勉強してみます
>>989でも問題なく動くとのことなので
Firefoxは一度再インストールしてみようと思います
1019:992
16/02/02 13:54:53.49 .net
すみません動かない原因がわかりました
最初のほう読み飛ばしていたのが原因で
<script type="application/javascript;version=1.7">
これを指定するのを忘れているのが原因でした
こんなの書かなくても動く>>991さんのコードを書けるようにしたいと思います
1020:Name_Not_Found
16/02/02 13:56:25.62 .net
再インストールすれば直るというものではない
エラーの内容からするとJS1.7以降のモードで動いていないんだろう
例えばShift+F4で開くスクラッチパッドに書いて実行してご覧
ただし上で出てるようにそれは廃止寸前の非標準な書き方だから覚えないように
1021:Name_Not_Found
16/02/02 14:32:04.33 .net
次スレ
+ JavaScript の質問用スレッド vol.128 +
スレリンク(hp板)
関連スレのみ修正
1022:Name_Not_Found
16/02/02 18:04:12.83 .net
>>985
実装は問いませんが、一言言わせてもらいますね
情報なんて公開している人は公開してますし、
回答者の立場を利用して罵倒したいだけの人は、レスは控えてください
何が気に障ったのか知りませんが
1023:Name_Not_Found
16/02/02 18:22:42.54 .net
Chromeの開発ツールでJavaScriptのメモリ使用量調べればいいんじゃね
1024:Name_Not_Found
16/02/02 18:27:50.75 .net
ブラウザスレに行くべき
そもそもECMAScriptにはGCについては何も書かれていないし、
JavaScript一般の話として何かを言うこともできない
1025:Name_Not_Found
16/02/02 18:33:22.32 .net
梅
1026:Name_Not_Found
16/02/02 18:34:12.24 .net
埋め
1027:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
1028:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています