JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは>>950が>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
※前スレ
+ JavaScript の質問用スレッド vol.123 +
https://mevius.5ch.net/test/read.cgi/tech/1491143438/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:: EXT was configured
+ JavaScript の質問用スレッド vol.124 +
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 8a52-hQZx [61.87.108.223])
2021/11/10(水) 15:24:24.80ID:jxD2VXPG02デフォルトの名無しさん (ワッチョイ 7f52-hQZx [61.87.108.223])
2021/11/10(水) 15:26:36.49ID:jxD2VXPG0 ■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■過去スレ全集
http://www2.atpages.jp/mirror/2ch/javascript/
http://usamimi.info/~mirrorhenkan/2ch/javascript/ (閲覧のみ)
■テンプレ案
https://fiddle.jshell.net/6018r9tu/1/show/light/
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■過去スレ全集
http://www2.atpages.jp/mirror/2ch/javascript/
http://usamimi.info/~mirrorhenkan/2ch/javascript/ (閲覧のみ)
■テンプレ案
https://fiddle.jshell.net/6018r9tu/1/show/light/
3デフォルトの名無しさん (ブーイモ MM0f-8Kye [163.49.205.32])
2021/11/10(水) 15:46:52.81ID:qwlO4mThM 前スレ998の質問だけど
一般的にはc2が返してるような関数のことをクロージャと呼ぶことが多いが
JavaScriptの関数は全部クロージャなのでc2自体もクロージャ
一般的にはc2が返してるような関数のことをクロージャと呼ぶことが多いが
JavaScriptの関数は全部クロージャなのでc2自体もクロージャ
4デフォルトの名無しさん (ワッチョイ df4e-9n+R [210.138.216.243])
2021/11/10(水) 16:02:48.18ID:ABhSQgxq0 なるほど
5デフォルトの名無しさん (ワッチョイ 5f21-+Epa [222.230.61.102])
2021/11/10(水) 17:50:22.23ID:KxrU4/8D06デフォルトの名無しさん (ワッチョイ ff46-H2rd [111.98.111.65])
2021/11/10(水) 18:59:16.59ID:l7XWnHd40 過去スレみれねー
7デフォルトの名無しさん (ワッチョイ 5f21-+Epa [222.230.61.102])
2021/11/11(木) 11:19:40.42ID:FWyFKZol0 前スレで誤字があったので訂正と
クロージャーに関してわかりやすく説明しときます
closerは誤りでclouserでした
クロージャーに関してわかりやすく説明しときます
closerは誤りでclouserでした
8デフォルトの名無しさん (ブーイモ MM83-WKYw [210.138.176.182])
2021/11/11(木) 11:24:24.80ID:vTNkP19HM 末尾セミコロンはどうしたらいいですか?
9デフォルトの名無しさん (ワッチョイ 5f21-+Epa [222.230.61.102])
2021/11/11(木) 11:47:50.28ID:FWyFKZol0 【クロージャー】
クロージャーはJSの関数に下記の仕組みを持たせるための要素のセットです
・関数内部をクローズにする(外部から直接アクセスできない)
・関数からは外部のプロパティにアクセスできる
この仕組みを作るものがクロージャーです
クロージャーの要素は、おおざっぱに関数自身、関数内情報、関数外部を参照するポインタで、
この要素のセットをクロージャーと呼びます
【外部ポインタの働きと内部情報の動きの確認】
<サンプルコード>
function f1(){ let c=0;return c++; }
function f2(){ let c=0;return ()=>{let s=0;return [c++,s++];} }
let f3=f2() ;
1 f1() ;f1() ;console.log(f1());
2 f2()();f2()();console.log(f2()());
3 f3() ;f3() ;console.log(f3());
<結果出力>
1 c:0
2 c:0 s:0
3 c:2 s:0
ここで外部への参照ポインタをouterとします
f1のクロージャーは、{関数f1 return c}{変数c}{outer(global}
f2のクロージャーは、{関数f2 return function}{変数c}{outer(global}
f2のアローの場合、 {無名 return [c,s]}{変数s}{outer(f2)}
クロージャーはJSの関数に下記の仕組みを持たせるための要素のセットです
・関数内部をクローズにする(外部から直接アクセスできない)
・関数からは外部のプロパティにアクセスできる
この仕組みを作るものがクロージャーです
クロージャーの要素は、おおざっぱに関数自身、関数内情報、関数外部を参照するポインタで、
この要素のセットをクロージャーと呼びます
【外部ポインタの働きと内部情報の動きの確認】
<サンプルコード>
function f1(){ let c=0;return c++; }
function f2(){ let c=0;return ()=>{let s=0;return [c++,s++];} }
let f3=f2() ;
1 f1() ;f1() ;console.log(f1());
2 f2()();f2()();console.log(f2()());
3 f3() ;f3() ;console.log(f3());
<結果出力>
1 c:0
2 c:0 s:0
3 c:2 s:0
ここで外部への参照ポインタをouterとします
f1のクロージャーは、{関数f1 return c}{変数c}{outer(global}
f2のクロージャーは、{関数f2 return function}{変数c}{outer(global}
f2のアローの場合、 {無名 return [c,s]}{変数s}{outer(f2)}
10デフォルトの名無しさん (ワッチョイ 5f21-+Epa [222.230.61.102])
2021/11/11(木) 11:48:17.36ID:FWyFKZol0 コード1では、f1を2回呼びますが、関数呼び出し1回につき、1つの(別々の)クロージャーが生成されます
同じ変数名のcであっても、別物のcとなります
ですから、cはインクリメントされずに0となります
コード2ではf2から戻されるアロー関数を複数回呼び出しますが
関数の呼び出し1回につき、別々のクロージャーが生成されますので
上記と同じようにcは0になります
コード3では、f2から戻されるアロー関数を変数f3に代入し、それを複数回呼び出します
呼び出しのたびに別々のクロージャーが生成されますが
外部への参照は、outer(f2)なので、同じcを参照していますので
複数回呼び出すとcをインクリメントします
一方でアロー関数内の変数sは、コード1や2の説明と同じでインクリメントされません
同じ変数名のcであっても、別物のcとなります
ですから、cはインクリメントされずに0となります
コード2ではf2から戻されるアロー関数を複数回呼び出しますが
関数の呼び出し1回につき、別々のクロージャーが生成されますので
上記と同じようにcは0になります
コード3では、f2から戻されるアロー関数を変数f3に代入し、それを複数回呼び出します
呼び出しのたびに別々のクロージャーが生成されますが
外部への参照は、outer(f2)なので、同じcを参照していますので
複数回呼び出すとcをインクリメントします
一方でアロー関数内の変数sは、コード1や2の説明と同じでインクリメントされません
11デフォルトの名無しさん (ワッチョイ 5f21-+Epa [222.230.61.102])
2021/11/11(木) 11:48:37.71ID:FWyFKZol0 【関数はクロージャーか?】
クロージャーは関数ではありませんし
関数はクロージャーではありません
関数内をクローズにし、外部参照を持たせる、という仕組みをつくるための
関数、内部情報、外部参照ポインタのセットがクロージャーです
【言語は多数者が正しい】
f2で戻される無名関数をクロージャーと呼ぶ人がいるのは
クロージャーの説明のために多用されていることで
無名関数をクロージャーと誤解してしまったり
f1が外部からクローズ状態なので、f1がクロージャーなんだと
そう理解してる人が多かったりしています
クロージャーという言語の用法に関して
何が正しいのかは、それぞれの立場を主張する人数によって
決定することが正しいのかもしれません
以上で訂正とまとめを終わります
クロージャーは関数ではありませんし
関数はクロージャーではありません
関数内をクローズにし、外部参照を持たせる、という仕組みをつくるための
関数、内部情報、外部参照ポインタのセットがクロージャーです
【言語は多数者が正しい】
f2で戻される無名関数をクロージャーと呼ぶ人がいるのは
クロージャーの説明のために多用されていることで
無名関数をクロージャーと誤解してしまったり
f1が外部からクローズ状態なので、f1がクロージャーなんだと
そう理解してる人が多かったりしています
クロージャーという言語の用法に関して
何が正しいのかは、それぞれの立場を主張する人数によって
決定することが正しいのかもしれません
以上で訂正とまとめを終わります
12デフォルトの名無しさん (ワッチョイ 5f21-+Epa [222.230.61.102])
2021/11/11(木) 12:08:29.83ID:FWyFKZol0 >>8
javascript.infoでは
[ ]の前にセミコロンは想定していないため、前段と次段のコードが連続することが説明されてます
console.log(1)
[...'string'].forEach(console.log)
は
console.log(1)[...'string'].forEach(console.log)
と同じ扱いで、1を出力したのち、エラーになります
[]を使うときに思い出してください
javascript.infoでは
[ ]の前にセミコロンは想定していないため、前段と次段のコードが連続することが説明されてます
console.log(1)
[...'string'].forEach(console.log)
は
console.log(1)[...'string'].forEach(console.log)
と同じ扱いで、1を出力したのち、エラーになります
[]を使うときに思い出してください
13デフォルトの名無しさん (ワッチョイ 5f01-Q360 [126.145.174.156])
2021/11/11(木) 13:44:12.02ID:PJUcZthZ0 >>7
closureでは?
closureでは?
14デフォルトの名無しさん (ワッチョイ ffdb-H2rd [217.178.96.78])
2021/11/11(木) 14:51:22.63ID:69bvz9620 スジャータ
15デフォルトの名無しさん (ブーイモ MM0f-8Kye [163.49.200.151])
2021/11/11(木) 16:11:30.72ID:+2WcRgNnM クロージャーに「関数内部をクローズにする」なんて意味はないよ
16デフォルトの名無しさん (ワッチョイ 7ff0-+Epa [61.205.223.183])
2021/11/11(木) 16:24:36.04ID:YbaQuGpg0 JSのクロージャーってどういう意味なの?
17デフォルトの名無しさん (ワッチョイ 7ff0-+Epa [61.205.223.183])
2021/11/11(木) 16:26:10.03ID:YbaQuGpg0 9の長い長い説明はまったくもって的外れ?
18デフォルトの名無しさん (ワッチョイ ff46-H2rd [111.98.111.65])
2021/11/11(木) 18:44:36.77ID:a2zl13Hx0 ふーん、なるほどねぇ
19デフォルトの名無しさん (ワッチョイ ff46-H2rd [111.98.111.65])
2021/11/11(木) 19:03:41.76ID:a2zl13Hx0 ||クロージャーは、組み合わされた(囲まれた)関数と、
||その周囲の状態(レキシカル環境)への参照の組み合わせです。
||言い換えれば、クロージャは内側の関数から外側の関数スコープへのアクセスを提供します。
||(MDN)
「関数の内から関数の外を参照できる、参照権限(参照できる状態(仕組み))」ということだろ!!!
これできめ!
||その周囲の状態(レキシカル環境)への参照の組み合わせです。
||言い換えれば、クロージャは内側の関数から外側の関数スコープへのアクセスを提供します。
||(MDN)
「関数の内から関数の外を参照できる、参照権限(参照できる状態(仕組み))」ということだろ!!!
これできめ!
20デフォルトの名無しさん (ワッチョイ 5f01-lK5T [126.242.217.11])
2021/11/11(木) 19:41:41.77ID:CFwD9UgS0 クロージャは関数閉包のこと
関数の中に関数が内包された状態を指す
外側の関数をエンクロージャと呼ぶが、クロージャ=関数ではない
関数の中に関数が内包された状態を指す
外側の関数をエンクロージャと呼ぶが、クロージャ=関数ではない
21デフォルトの名無しさん (ワッチョイ ff2d-+Epa [121.102.71.88])
2021/11/11(木) 20:24:37.12ID:eeb4OqXn0 現在のスコープに変数が見つからなければ、どんどん外のスコープに変数を探しに行って
最終的にwindowまで探しに行ってくれる機能のことをクロージャと呼ぶ
かな?
最終的にwindowまで探しに行ってくれる機能のことをクロージャと呼ぶ
かな?
22デフォルトの名無しさん (ワッチョイ 5f01-lK5T [126.242.217.11])
2021/11/11(木) 20:29:10.77ID:CFwD9UgS023デフォルトの名無しさん (ワッチョイ ffb0-QVGU [153.219.213.62])
2021/11/11(木) 21:31:01.83ID:P2a3zHOn0 Promiseの状態(pending/fullfilled/rejected)って外から取得できないんだっけ?
探しても方法が見つからな。
探しても方法が見つからな。
24デフォルトの名無しさん (ブーイモ MM4f-8Kye [133.159.152.241])
2021/11/11(木) 22:17:06.64ID:9vb0JKHxM MDNの訳が微妙すぎると思ったら原文も同じだった
A closure is the combination of a function with references to its surrounding state.
か
A closure is a function bundled together with references to its surrounding state.
のどっちかにしたかったんだろう
A closure is the combination of a function with references to its surrounding state.
か
A closure is a function bundled together with references to its surrounding state.
のどっちかにしたかったんだろう
25デフォルトの名無しさん (ワッチョイ ff46-H2rd [111.98.111.65])
2021/11/11(木) 22:18:41.74ID:a2zl13Hx026デフォルトの名無しさん (ワッチョイ ff46-H2rd [111.98.111.65])
2021/11/11(木) 22:22:39.31ID:a2zl13Hx0 >>24
JSの設計のあいまいさを感じられるな
JSの設計のあいまいさを感じられるな
27デフォルトの名無しさん (ブーイモ MM4f-8Kye [133.159.150.0])
2021/11/11(木) 22:44:02.25ID:/xlmv84EM28デフォルトの名無しさん (ワッチョイ 6e46-wd7R [111.98.111.65])
2021/11/12(金) 07:15:12.60ID:JgN/83EX0 それを読んでも統一見解が得られづらいからこうなってるってわかる?
29デフォルトの名無しさん (ワッチョイ 6e46-wd7R [111.98.111.65])
2021/11/12(金) 07:25:05.37ID:JgN/83EX0 でもまぁ一連のやり取りで
環境レコードや外部参照チェーンやスコープの復習ができたということで
この部分に関しては、脱素人になったわけだ、おめでとー
環境レコードや外部参照チェーンやスコープの復習ができたということで
この部分に関しては、脱素人になったわけだ、おめでとー
30デフォルトの名無しさん (ワッチョイ bd10-HV3m [180.12.82.129])
2021/11/14(日) 19:04:13.43ID:y8V9oC250 canvasでcontext.lineWidth=1;にして直線を描いても幅が1にならなくて2ピクセル分の太さになってしまいます
どうすれば幅1の直線が描けますか?
どうすれば幅1の直線が描けますか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否★4 [夜のけいちゃん★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★4 [蚤の市★]
- 中国側が首相答弁の撤回要求、日本側拒否★5 [夜のけいちゃん★]
- 「厚かましい挑発的発言だ」中国国連大使が高市首相発言に強く反発 日本の常任理事国入りに明確に反対 [ぐれ★]
- 解体ごみ約2.3トンを山に不法投棄か トルコ国籍解体工を逮捕 埼玉 [どどん★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★6 [ぐれ★]
- 【悲報】高市総理モノマネにとろサーモン久保田がブチギレ。「しょーもない。高市さんは頑張ろうとしてるやろ」😮 [518915984]
- 【悲報】高市早苗さん、たった一人で日本を崩壊へ導く [714769305]
- 中国により高市叩き、習近平含む上層部による指示だった… 反日デモ発動も選択肢 [271912485]
- 【悲報】「やったー!こだわりまくった洋館仕立ての家を建てたぞ!」➡「「離婚したんで住まずに売ります……」 [158478931]
- 精神する時の🏡
- 【悲報】高市「ガソリン税減税するわよ!」海外「財政危機の日本で減税とか正気か?」日本売りで債券株式通貨のトリプル安wwwwwwwwwwww [786648259]
