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の直線が描けますか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 東京都「都民の税金1.5兆円が国に奪われている」「全国に分配されている」に地方民ブチギレ [Hitzeschleier★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 [蚤の市★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ [蚤の市★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- トランプ、G7に代わるcore 5を発表 [805596214]
- はいはい
- 面接官「このペンを私に1万円で売ってください」←これの正解
- 中国政府、国民に再び日本に行かないよう警告。「高市政権が地震頻発で大地震が発生する可能性あると言ってます😤」 [271912485]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★5
