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の直線が描けますか?
31デフォルトの名無しさん (ワッチョイ 4d01-gBK2 [126.243.242.148])
2021/11/14(日) 19:57:25.52ID:oSBO5A5Z0 >>25
言語仕様に言及するのなら、「ECMAScriptにクロージャは存在しない」が正解
> グローバル内に宣言された関数も、囲まれた関数なんだよ
そんな仕様はない
クロージャなんて概念は忘れて、変数、スコープ、関数の仕組みを覚える方が正しい理解に繋がる
言語仕様に言及するのなら、「ECMAScriptにクロージャは存在しない」が正解
> グローバル内に宣言された関数も、囲まれた関数なんだよ
そんな仕様はない
クロージャなんて概念は忘れて、変数、スコープ、関数の仕組みを覚える方が正しい理解に繋がる
32デフォルトの名無しさん (ワッチョイ f661-lRA9 [153.160.97.54])
2021/11/14(日) 20:00:15.95ID:g8AzdeEc033デフォルトの名無しさん (ワッチョイ 4d01-gBK2 [126.243.242.148])
2021/11/14(日) 20:54:05.86ID:oSBO5A5Z0 >>28
クロージャで統一見解といえるのは「クロージャ=関数が入れ子になった状態」だけ
そこに機能的価値を見いだそうとするなら「クロージャという名の機能は存在しない」だ
機能的には別の機能で実装されていて、
関数を入れ子にした結果、それらの機能が便利な状況を作り出しているに過ぎない
学習目的なら「クロージャ」は忘れた方がいい
クロージャで統一見解といえるのは「クロージャ=関数が入れ子になった状態」だけ
そこに機能的価値を見いだそうとするなら「クロージャという名の機能は存在しない」だ
機能的には別の機能で実装されていて、
関数を入れ子にした結果、それらの機能が便利な状況を作り出しているに過ぎない
学習目的なら「クロージャ」は忘れた方がいい
34デフォルトの名無しさん (ブーイモ MM8e-o9bf [133.159.149.178])
2021/11/14(日) 21:16:07.13ID:Ec4oDlx8M 関数が入れ子かどうかなんて関係ないよ
理解してない人たち同士で"統一見解"を求めようとするからドツボに嵌ってる
理解してない人たち同士で"統一見解"を求めようとするからドツボに嵌ってる
35デフォルトの名無しさん (ワッチョイ 4d01-gBK2 [126.243.242.148])
2021/11/14(日) 21:27:55.45ID:oSBO5A5Z0 >>34
仕様にない単語に、統一見解を求めるのが間違いなんだろうな
仕様にない単語に、統一見解を求めるのが間違いなんだろうな
36デフォルトの名無しさん (ワッチョイ f6b0-WW/G [153.219.213.62])
2021/11/14(日) 21:47:51.05ID:ybz8bu8o0 とはいえ「クロージャ=関数が入れ子になった状態」って定義は明らかに間違いだろう。
37デフォルトの名無しさん (ブーイモ MM5e-o9bf [163.49.204.253])
2021/11/14(日) 21:57:27.13ID:pXm3Ey2jM ECMAの仕様にはAbstruct Closure Specification Typeが定義されてるし、関数定義周りでclosureって言葉は繰り返し出てくるよ
まあでも仕様型みたいな大半の人が知らなくても困らないような詳細知識よりも
クロージャとは一般的にどういうものを指すのかという基礎的知識を身につけたほうがいい
まあでも仕様型みたいな大半の人が知らなくても困らないような詳細知識よりも
クロージャとは一般的にどういうものを指すのかという基礎的知識を身につけたほうがいい
38デフォルトの名無しさん (ワッチョイ 4d01-gBK2 [126.243.242.148])
2021/11/14(日) 23:10:09.15ID:oSBO5A5Z039デフォルトの名無しさん (ワッチョイ da02-wd7R [59.129.58.203])
2021/11/15(月) 00:30:22.12ID:gtEjBgCa0 ワロスw
40デフォルトの名無しさん (ワッチョイ 6e46-wd7R [111.98.111.65])
2021/11/15(月) 07:13:10.30ID:slHpwqED0 JSのクロージャーは
関数内のプロパティに、外部から直接アクセスできないが
関数内から外部への参照はチェーンしているという状態をいう
外部Lexicalへの参照を持たない関数型は
関数ではあるけどクロージャーにならない
入り子になっていても
もうクロージャはこれで終わり
クロージャーに貴重な人生を奪われるなよ?
関数内のプロパティに、外部から直接アクセスできないが
関数内から外部への参照はチェーンしているという状態をいう
外部Lexicalへの参照を持たない関数型は
関数ではあるけどクロージャーにならない
入り子になっていても
もうクロージャはこれで終わり
クロージャーに貴重な人生を奪われるなよ?
4140 (ワッチョイ 6e46-wd7R [111.98.111.65])
2021/11/15(月) 07:21:28.04ID:slHpwqED0 状態ではなく仕組みがいいな
クロージャーはオブジェクトセットという表現が適してる例が散見されるみたいだし
必要なオブジェクトセットを使ってnativeでクロージャーを実現してるんだから
クロージャーは仕組み!これできめ!
クロージャーはオブジェクトセットという表現が適してる例が散見されるみたいだし
必要なオブジェクトセットを使ってnativeでクロージャーを実現してるんだから
クロージャーは仕組み!これできめ!
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 [蚤の市★]
- 中国側が首相答弁の撤回要求、日本側拒否★2 [夜のけいちゃん★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★5 [ぐれ★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★6 [BFU★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- ホテル業界、高市のせいで中国から大量キャンセル 「大変厳しい状態。一刻も早い収束を願います」 [271912485]
- 【正論】玉木雄一郎「高市さんの答弁は米軍が攻撃を受けた場合を前提としており、撤回するのは難しい」特定野党を完全論破 [519511584]
- 鈴木農水大臣「コメの価格が上がってるのは新米に切り替わったからです」 [256556981]
- 麻生太郎氏、高市政権と距離を置きはじめる(´・ω・`) [399259198]
- 日本がボロボロになった理由を嫌儲民が画像1枚でズバッと解説 [819729701]
- んなり放題🍬のお🏡
