[過去ログ] + JavaScript の質問用スレッド vol.123 + [無断転載禁止]©2ch.net (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
989
(2): (ワッチョイ 7ff0-+Epa [61.205.223.183]) 2021/11/09(火)17:29 ID:vBEqEZ0H0(1) AAS
よろしくお願いします

下記の二つの関数、c1()とc2()でカウンターを作りました
c1()はカウントされず、c2()はカウントされます
同じようなコードなのにc1()を複数回呼び出しても
変数cがインクリメントされないのはなぜなのでしょうか?

function c1(){
let c=0;
return c++;
}

function c2(){
省11
992: (ワッチョイ 5f01-lK5T [126.243.174.47]) 2021/11/09(火)20:03 ID:zgMlwp7I0(1) AAS
>>989
c1は呼び出される度に変数cが初期化される
s2は呼び出されても変数cが初期化されない
997: (ワッチョイ 5f21-+Epa [222.230.61.102]) 2021/11/10(水)12:24 ID:KxrU4/8D0(2/3) AAS
>>989
関数やブロックはプロパティをLexicalという場所に登録するんだけど
プロパティを参照した時には、関数内やブロック内のLexicalを参照し
そこにプロパティが登録されてないとその直外のLexicalを参照します

関数は、呼び出しごとに内部Lexicalが生成されるので
c1();c1();c1()と呼び出すと、別々の3つの内部Lexicalが生成され
それらに別々のlet cが登録されるので、c=0となります

s1にはc1()への関数の参照が格納されてるので
s1を複数回呼び出すと、c1()を複数回参照し
上記と同じ結果になります
省4
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.029s