私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.138 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
>>505
高階関数を簡単に書くためのものだよ
高階関数っていうのは関数を引数に取る関数
コールバックを引数にするとほぼ同等
var array1 = [1, 4, 9, 16];
var map1 = array1.map(function(x) {
return x * 2
});
長ったらしいだろ?
これをこう書ける。
var map1 = array1.map(x => x * 2);
こう書くことで、単に短く書けるだけでなく
「関数が呼ばれる」という感じから「式を渡す」感じになるだろ?
さらに関数っぽく見えないのでthisも呼び出し元のthisを
そのまま参照するという感じが素直に受け入れられる
たまに関数の改良型だと思ってなんでもアロー関数にするやつがいるけど
高階関数用の引数だと思ったほうが良いよ
高階関数を簡単に書くためのものだよ
高階関数っていうのは関数を引数に取る関数
コールバックを引数にするとほぼ同等
var array1 = [1, 4, 9, 16];
var map1 = array1.map(function(x) {
return x * 2
});
長ったらしいだろ?
これをこう書ける。
var map1 = array1.map(x => x * 2);
こう書くことで、単に短く書けるだけでなく
「関数が呼ばれる」という感じから「式を渡す」感じになるだろ?
さらに関数っぽく見えないのでthisも呼び出し元のthisを
そのまま参照するという感じが素直に受け入れられる
たまに関数の改良型だと思ってなんでもアロー関数にするやつがいるけど
高階関数用の引数だと思ったほうが良いよ
>>507
恥ずかしくないの?
恥ずかしくないの?
JavaScript のthis は、文脈によって、Global(window) を指す事があるから、ややこしい
TypeScript は、これを踏襲しているけど、
Haxe, jQuery は、this の意味を変えている
TypeScript は、これを踏襲しているけど、
Haxe, jQuery は、this の意味を変えている
DOMのthisの話だったよね。
ほいこれ。これがDOMのthisでjQueryはDOM標準に準拠してる。
http://jsfiddle.net/ub0rh3fo/
document.getElementById('id').addEventListener('click', function() {
this.classList.toggle('on');
},false);
ほいこれ。これがDOMのthisでjQueryはDOM標準に準拠してる。
http://jsfiddle.net/ub0rh3fo/
document.getElementById('id').addEventListener('click', function() {
this.classList.toggle('on');
},false);
一番ハマるのは、setTimeoutだろう。これもDOMだが
「Global(window) を指す事があるから、ややこしい」=setTimeoutぐらいしか
思いつかないんだが。あとは似たようなsetIntervalか。
「Global(window) を指す事があるから、ややこしい」=setTimeoutぐらいしか
思いつかないんだが。あとは似たようなsetIntervalか。
>>511はどういう意味?
thisがややこしい?
thisは関数が呼ばれるときに決まる第0の引数のようなものなんだから
呼ばれ方によって呼ぶ方の取り決めによって如何様な値も取りうることは当然だし
ドット演算子と関数呼び出しを組み合わせるとレシーバが来るという基本はあるけれど
別にthisはそれだけのために存在してるものではないし
変な固定観念を捨てて簡単に考えれば何も難しくないと思うけどな
thisは関数が呼ばれるときに決まる第0の引数のようなものなんだから
呼ばれ方によって呼ぶ方の取り決めによって如何様な値も取りうることは当然だし
ドット演算子と関数呼び出しを組み合わせるとレシーバが来るという基本はあるけれど
別にthisはそれだけのために存在してるものではないし
変な固定観念を捨てて簡単に考えれば何も難しくないと思うけどな
chrome ver73 64bit使ってるけどimport/exportがSyntax Errorになる
まだ未実装ということでwebpackだかbabelだかソース変換ツールが必要なのかな
まだ未実装ということでwebpackだかbabelだかソース変換ツールが必要なのかな
「○○難しい」って人に「全然難しくないよ!」って返す人は教える才能ない
とはいえ悪いことでもないので、人に教えるなんて無駄なことせずにガシガシコード書いてればいい。
とはいえ悪いことでもないので、人に教えるなんて無駄なことせずにガシガシコード書いてればいい。
>>523
const array = [1, 2, 3, 4,5];
array.forEach(function() {
console.log(this); // Windowと表示される。
});
いま、thisが「Global(window) を指す事があるから、ややこしい」
って話でしたよね?
const array = [1, 2, 3, 4,5];
array.forEach(function() {
console.log(this); // Windowと表示される。
});
いま、thisが「Global(window) を指す事があるから、ややこしい」
って話でしたよね?
↑を見れば分かるように、
JavaScript標準自体がややこしいんだよね。
JavaScript標準自体がややこしいんだよね。
document.getElementById('id').addEventListener('click', function() {
const array = [1, 2, 3];
console.log(this); // ここのthisはDOM Element
array.forEach(function() {
console.log(this); // ここのthisはWindow
});
}, false);
このように、thisが変わるのがややこしいって話でしょ?
jQueryとか関係ないよ。
const array = [1, 2, 3];
console.log(this); // ここのthisはDOM Element
array.forEach(function() {
console.log(this); // ここのthisはWindow
});
}, false);
このように、thisが変わるのがややこしいって話でしょ?
jQueryとか関係ないよ。
ちなみに、jQueryのeach使って、thisを変えたくなければ
アロー関数を使えばいい。これもJavaScript標準と同じ
$('#id').on('click', function() {
const array = [1, 2, 3];
console.log(this); // ここのthisはDOM Element
$.each(array, () => console.log(this)); // ここのthisもDOM Element
});
アロー関数を使えばいい。これもJavaScript標準と同じ
$('#id').on('click', function() {
const array = [1, 2, 3];
console.log(this); // ここのthisはDOM Element
$.each(array, () => console.log(this)); // ここのthisもDOM Element
});
ハイパー大雑把に言えば
thisはクラスのメンバ関数でクラス自体を参照するものだったじゃん?
thisはクラスのメンバ関数でクラス自体を参照するものだったじゃん?
>>531
「俺の知っている言語では」という言葉が抜けてるよ
「俺の知っている言語では」という言葉が抜けてるよ
全てはJavaやC++のthisの説明がダメダメなんだよ。
class Hoge {
private String str = 'hoge';
public void foo() {
System.out.println(this.str); // ×間違い thisはクラスのインスタンス自身です
}
}
Hoge hoge = new Hoge();
hoge.foo()
↑
○ 正解 thisとはfooメソッドを呼んだ時の.の左側のことです。
と正しく説明していれば、JavaScriptも同じだってわかるのに
class Hoge {
private String str = 'hoge';
public void foo() {
System.out.println(this.str); // ×間違い thisはクラスのインスタンス自身です
}
}
Hoge hoge = new Hoge();
hoge.foo()
↑
○ 正解 thisとはfooメソッドを呼んだ時の.の左側のことです。
と正しく説明していれば、JavaScriptも同じだってわかるのに
>>534
そもそもthisを変えない。ということはありえないよ
document.getElementById('id').addEventListener('click', function() {
const array = [1, 2, 3];
console.log(this); // ここのthisはDOM Element
array.forEach(function() {
console.log(this); // ここのthisはWindow ← 【thisが変わってしまっている】
});
}, false);
そもそもthisを変えない。ということはありえないよ
document.getElementById('id').addEventListener('click', function() {
const array = [1, 2, 3];
console.log(this); // ここのthisはDOM Element
array.forEach(function() {
console.log(this); // ここのthisはWindow ← 【thisが変わってしまっている】
});
}, false);
>>536
その言い方だとjQueryがthisを変えてるのが悪いように見えるけど、
実際にはJavaScriptだってthisを変えているし、
むしろjQueryは正しい方向にthisを修正しているってことだろう?
その言い方だとjQueryがthisを変えてるのが悪いように見えるけど、
実際にはJavaScriptだってthisを変えているし、
むしろjQueryは正しい方向にthisを修正しているってことだろう?
>>526
教える才能もクソもないよ
JSの細かな仕様を覚えろと説明してもしょうがないでしょ
だから変な固定観念を捨てて柔軟に捉えろと言ってる
thisが難しいのではなくて難しく考えてるだけ
そしてそこを柔軟に捉えるのが難しいってだけで
最初から第0引数と思ってれば何にも難しくない
そこが難しくなってしまってるのはもう仕方のないことだから頑張れとしか言えん
何か詳しく知りたいのなら聞いてくれれば具体的に細かく教えるが
細かく聞いてそれで理解できる人は自分で調べられる
だからとりあえず固定観念を捨てろとしか言えん
教える才能もクソもないよ
JSの細かな仕様を覚えろと説明してもしょうがないでしょ
だから変な固定観念を捨てて柔軟に捉えろと言ってる
thisが難しいのではなくて難しく考えてるだけ
そしてそこを柔軟に捉えるのが難しいってだけで
最初から第0引数と思ってれば何にも難しくない
そこが難しくなってしまってるのはもう仕方のないことだから頑張れとしか言えん
何か詳しく知りたいのなら聞いてくれれば具体的に細かく教えるが
細かく聞いてそれで理解できる人は自分で調べられる
だからとりあえず固定観念を捨てろとしか言えん
>>535
何か少し勘違いしてね?
addEventListenerは第二引数に渡される関数を
DOM要素にバインドするメソッドなんだから
thisがイベントターゲットになるのは当たり前
forEachは引数に渡された関数を繰り返すだけなんだから
何にもバインドされてない関数のthisがグローバルになるのも当たり前よ
何か少し勘違いしてね?
addEventListenerは第二引数に渡される関数を
DOM要素にバインドするメソッドなんだから
thisがイベントターゲットになるのは当たり前
forEachは引数に渡された関数を繰り返すだけなんだから
何にもバインドされてない関数のthisがグローバルになるのも当たり前よ
jQueryやprototype.jsがバズる前夜
JSとAS界隈で、即席に閉じたスコープを作るのに
(function(){
})();
をほいほい書いちゃう宗教が出来て
それがループに適用されると
for(var i=0 ; i<配列.length ; i++)(function(index,item){
})(i, 配列[i]);
みたいな形になって、ここでcallやapplyを使って
thisを配列[i]にしちゃう宗派も出来た
その系譜がjQueryだったんだな
JSとAS界隈で、即席に閉じたスコープを作るのに
(function(){
})();
をほいほい書いちゃう宗教が出来て
それがループに適用されると
for(var i=0 ; i<配列.length ; i++)(function(index,item){
})(i, 配列[i]);
みたいな形になって、ここでcallやapplyを使って
thisを配列[i]にしちゃう宗派も出来た
その系譜がjQueryだったんだな
>>547
へー面白い
へー面白い
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.130 + (1001) - [97%] - 2017/11/25 20:45
- + JavaScript の質問用スレッド vol.135 + (1002) - [97%] - 2018/11/23 10:30
- + JavaScript の質問用スレッド vol.130 + (974) - [97%] - 2016/10/26 14:18
- + JavaScript の質問用スレッド vol.108 + (1001) - [97%] - 2013/9/21 15:16
- + JavaScript の質問用スレッド vol.131 + (1004) - [97%] - 2018/3/7 13:30
- + JavaScript の質問用スレッド vol.132 + (1001) - [97%] - 2018/4/19 11:00
- + JavaScript の質問用スレッド vol.133 + (1001) - [97%] - 2018/6/8 10:45
- + JavaScript の質問用スレッド vol.128 + (1001) - [97%] - 2016/2/26 6:45
- + JavaScript の質問用スレッド vol.131 + (1000) - [97%] - 2017/1/25 8:01
- + JavaScript の質問用スレッド vol.134 + (1001) - [97%] - 2018/8/3 23:15
- + JavaScript の質問用スレッド vol.136 + (1001) - [97%] - 2019/1/8 11:30
- + JavaScript の質問用スレッド vol.137 + (1003) - [97%] - 2019/3/26 11:46
- + JavaScript の質問用スレッド vol.139 + (1001) - [97%] - 2019/5/27 15:15
- + JavaScript の質問用スレッド vol.118 + (1002) - [97%] - 2014/8/29 22:30
- + JavaScript の質問用スレッド vol.117 + (1009) - [95%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.116 + (1002) - [95%] - 2014/7/1 0:45
- + JavaScript の質問用スレッド vol.119 + (1002) - [95%] - 2014/10/3 15:30
トップメニューへ / →のくす牧場書庫について