のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,432,597人
昨日:no data人
今日:
最近の注目
人気の最安値情報

元スレ+ JavaScript の質問用スレッド vol.119 +

JavaScript覧 / PC版 /
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

653 = :

無名関数って名前が良くないよな

var a = function hoge(){};

これも無名関数だろ?

654 = :

>>647の言いたい事は↓これ
addEventListener("click", function hoge(){
...
removeEventListener("click, hoge); // ○
});
removeEventListener("click, hoge); // × hogeが見つからない

2度呼ばせないようにする事には使える

655 = :

名前付き関数式だね

656 = :

>>654
大体そうだけど、元のコードを尊重すると
var func = function(obj){
return function foobar(){
console.log(obj);
obj.removeEventListener('click', foobar);
}
};
を想定してた

あと
(function me() {
 :
 :
 me();
})();

みたいな即時関数で再帰使いたい時に使わん?

657 = :

ありがとうございますできました

658 = :

>>653
それは無名関数とはいわない

>>656
普通に使うよね

659 = :

>>658
hogeは関数内部からしか参照できないんだから本質的には無名関数と変わりない
つまり無名関数という言葉の方がおかしい
はい論破

660 = :

>>659
お前はそれでいいや

他の人はググって確認しておくように

661 = :

addEventListener('click', a.func)
こういう感じのオブジェクトの中に関数が入った?関数を指定するのはダメで
addEventListener('click', func)
って関数はOKっていうのをどこかで読んだんですが理由教えてください

662 = :

無名関数式を名前付き関数式にしてるわけだから「名前を付ける」という言葉は間違ってないな
名前付き関数式の知名度はもう少しあがってもいい

663 = :

>>661
駄目な理由はない
駄目な理由をあなたが勘違いしてるとしか思えない

664 = :

>>661
コンテキスト=thisが変わるからじゃないかな
関数内でthisを使わないとか
callやapplyでthisを明示的に指定する、などの方法で問題は回避できる

665 = :

JavaScriptで無名関数という言葉は使うべきじゃない
なぜならそこでは無名性には大した意味はないから
はい論破

666 = :

無名関数と言わず、単に関数式と言えばいい
それに名前があろうがなかろうが、関数の外部には影響がないんだから

667 = :

すきにするがよい

668 = :

■A
var test = document.getElementById('test');
var hoge = {};
hoge.print = function(){
console.log(this); // divを参照する
};
test.addEventListener('click', hoge.print, false);

■B
var test = document.getElementById('test');
var hoge = function(){
console.log(this); // divを参照する
};
test.addEventListener('click', hoge, false);

どっちも変わらなかった

670 = :

var test = document.getElementById('test');
var hoge = {};
hoge.print = function(){
var _this = hoge.print.call(hoge);
console.log(_this);
};
test.addEventListener('click', hoge.print, false);

Uncaught RangeError: Maximum call stack size exceeded ってなりました
どうやってthisをhogeにできますか?

672 = :

>>666
関数内部の質問に対して何を言ってるんだか

673 = :

>>672
JavaScriptの本質についての話をしてるんだよ
質問は関係ない

674 = :

>>673
ああそう
で、関数式に名前を付けるのと付けないので異なる処理をすることを説明するときにもひとくくりに関数式と呼ぶのかね?
正式に言うなら「名前付き関数式」「無名関数式」でいいと思うがね
あの文脈なら「無名関数に名前を付ける」で十分に意味が通じるし、関数式ではむしろ意味が通らない

675 :

おすすめの参考書とか聞いても答えてくれるん?

676 = :

>>675
特に制限はされてないと思うが
参考書に求めるものが具体的が明示されており、その目的に沿う参考書を知っている人がいたなら答えてくれるかもしれない

677 = :

素直に知らないって言えばいいのに
こいつらいっつも何がしたいかーとか何を求めているかーとかって言い訳するよな
聞き飽きたはw

678 = :

顧客の希望を聞かずにいきなり自分のお勧めを紹介する人は信用できない
判断基準が適当かつ恣意的にすぎる

679 = :

言い訳すんなっつってんだろw

680 = :

普遍的な価値基準があると本気で信じてるんだな
馬鹿すぎるわw

682 = :

>>670
thisはhogeになってるよw

それ以前に他の場所、関数の戻り値とかの
もっと初歩的な所が理解出来てないだけ。

ブラウザのデバッガ機能のステップ実行とか
使って動きを一行ずつ確認してみれ

683 = :

>>680
お前は馬鹿の一つ覚えみたいに同じことばっかりいうよなw

684 = :

>>683
理解力の低い人に対しては致し方ないな

685 = :

ライブラリを作る時にはこうしたら便利だよ的なことが書かれている本があれば教えて下さい

686 = :

JavaScriptパターンにそれっぽいことが書かれてるようなので
再読してみます

687 = :

>>670
呼び出し元の
test.addEventListener('click', hoge.print, false);
を変えないということならば
hoge.print = function(){
console.log(this);
}.bind(hoge);
こうだな

688 = :

>>670
再起呼び出しが無限ループしてるよw
そんでスタックオーバーフローしてる

689 = :

>>632
悪意のあるスクリプトタグが追加されて、
この悪意あるスクリプトは見えないiframeを追加し、RIG exploit kitをホスティングするWebサイトにリダイレクトする。
最終的にはドライブバイダウンロードによりマルウェアが閲覧者のコンピューター上で実行されるという。


ここ最近jQueryの公式にアクセスした奴は
使ってるPCと、その間アクセスしたサーバー/システムのチェックとパスワードの変更をしておけよ

690 = :

>>684
お前は同レベルってことに気づいてないのか・・・

691 = :

<div id="root">
<div>
aaaaaaa
<p>bbbbbbbbbbbb</p>
</div>
<div>c</div>
</div>

var root = document.getElementById('root');
root.addEventListener('click', function(e){
console.log(this);
console.log(e.target.innerHTML);
console.log(e.target);
console.log(e);
}, false);

#rootをgetElementByIdで取ってイベントリスナーでClickした時に
子要素のどこをクリックしても頂点の#rootが欲しいんですが
e.targetとeをみても取れなさそうでした
どうやれば#rootにたどれますか?

692 = :

>>691
http://developer.mozilla.org/en/docs/Web/API/event.currentTarget

694 :

>>689
ドライバって実行ファイルだろ?
普通警告出るし、実行しなけりゃ問題ないんじゃないの?
もしCDNのjqueryをこっそり改造して変数の内容をどこかに転送
とかしてたら恐ろしい被害が出ただろうな

695 = :

>>692
> On Internet Explorer 6 through 8, the event model is different.
> Event listeners are attached with the non-standard element.attachEvent method.

この文章が気になりました。

IE8のサポート終了って2016年1月なんですよね。

696 = :

>>695
IE8てまだサポートしてたのか。

698 :

サイトによっては、アクセス解析の結果、IE8が少なくないこともあるな

あと残念なのが、ユーザではなく客が仕事場で使っているのがIE8だから
って理由でそれに合わせることも少なくない

699 = :

>>695
そもそも、IE8をサポートするなら addEventListener を使えないだろう
(addEventListener 前提の質問だから考慮はしなかったが)
IE8を考慮するならクロージャに閉じ込めたスコープで Function#call でも使えばいい

700 = :

>>692
すいませんcurrentTargetがnullでした


←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について