譛ャ鬆√�逶ョ谺。 逶ョ谺。 谺。鬆�: 14_Program 蜑埼��: 12_Statements
function
Identifier ( FormalParameterListopt ) { FunctionBody }function
Identifieropt ( FormalParameterListopt ) { FunctionBody }逕滓�隕丞援 FunctionDeclaration : function
Identifier ( FormalParameterListopt ) { FunctionBody } 縺ッ髢「謨ー螳」險縺ョ縺溘a縺ォ谺。縺ョ繧医≧縺ォ蜃ヲ逅�&繧後k:
逕滓�隕丞援 FunctionExpression : function
( FormalParameterListopt ) { FunctionBody } 縺ッ谺。縺ョ繧医≧縺ォ隧穂セ。縺輔l繧�:
逕滓�隕丞援 FunctionExpression : function
Identifier ( FormalParameterListopt ) { FunctionBody } 縺ッ谺。縺ョ繧医≧縺ォ隧穂セ。縺輔l繧�:
new
Object() 縺ォ繧医k繧ゅ�縺ァ縺ゅk縺九�繧医≧縺ォ縲∵眠縺励>繧ェ繝悶ず繧ァ繧ッ繝医r逕滓�縺吶k縲�NOTE FunctionExpression 蜀�� Identifier 縺ッ縲� FunctionExpression 縺ョ FunctionBody 縺ョ蜀�Κ縺九i蜿ら�縺悟庄閭ス縺ァ縲�未謨ー縺ォ縺昴l閾ェ霄ォ縺ョ蜀榊クー逧�他縺ウ蜃コ縺励r險ア蜿ッ縺吶k縲ゅ@縺九@縺ェ縺後i縲� FunctionDeclaration 縺ィ縺ッ逡ー縺ェ繧翫� FunctionExpression 蜀�� Identifier 繧貞盾辣ァ縺ッ縺ァ縺阪★縲� FunctionExpression 繧帝哩縺倥k繧ケ繧ウ繝シ繝励↓蠖ア髻ソ縺励↑縺��
逕滓�隕丞援 FunctionBody : SourceElements 縺ッ谺。縺ョ繧医≧縺ォ隧穂セ。縺輔l繧�:
髢「謨ー繧ェ繝悶ず繧ァ繧ッ繝育函謌舌�蜃ヲ逅�r霑ー縺ケ繧九◆繧√�2 縺、縺ョ螳夂セゥ繧定ヲ√☆繧�:
FunctionBody 譁�ウ慕函謌占ヲ丞援繧堤畑縺�k 2 閠��縲∵ャ。縺ョ縺�■縺ョ荳縺、縺檎悄縺ァ縺ゅk縺ィ縺阪∫ュ峨@縺�b縺ョ縺ァ縺ゅk縺ィ螳夂セゥ縺輔l繧�:
NOTE Function 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ蜻シ縺ウ蜃コ縺�(15.3.1, 15.3.2) 縺九i蜿門セ励&繧後k FunctionBody 繧堤畑縺�k 2 閠��縲√¢縺励※遲峨@縺�→縺ッ縺ソ縺ェ縺輔l縺ェ縺��2 縺、縺ョ逡ー縺ェ繧� eval 蜻シ縺ウ蜃コ縺励°繧牙叙蠕励&繧後k FunctionBody 繧堤畑縺�k 2 閠�b縲√◎繧後′蜷後§蠑墓焚繧呈ク。縺輔l縺ヲ縺�◆縺ィ縺励※繧ゅ∫ュ峨@縺�→縺ッ縺ソ縺ェ縺輔l縺ェ縺��
2 縺、莉・荳翫� Function 繧ェ繝悶ず繧ァ繧ッ繝医′邨仙粋縺励※縺�k縺ィ縺阪√◎繧後i縺ッ谺。縺ョ迚ケ谿翫↑謖ッ繧玖�縺�r謖√▽:
NOTE 莠偵>縺ォ邨仙粋縺励◆ 2 縺、莉・荳翫�繧ェ繝悶ず繧ァ繧ッ繝医�縲√◎繧後i縺檎焚縺ェ繧句�驛ィ繝励Ο繝代ユ繧」繧呈戟縺」縺ヲ縺�k縺九b縺励l縺ェ縺�せ繧帝勁縺�※縲∽コ句ョ滉ク雁愛蛻・縺ァ縺阪↑縺�よ悽莉墓ァ倥↓縺翫>縺ヲ逡ー縺ェ縺」縺ヲ繧ゅh縺�h縺�↑蜀�Κ繝励Ο繝代ユ繧」縺薙◎縺� [[Scope]] 縺ァ縺ゅk縲らオ仙粋縺輔l縺溘が繝悶ず繧ァ繧ッ繝医�縲∵ュ」遒コ縺ェ莉墓ァ俶橿陦鍋畑縺ョ驕灘�縺ィ縺励※縺薙�讓呎コ悶�荳ュ縺ァ菴ソ逕ィ縺輔l繧九ゅ◎繧後�縲∝ョ滄圀縺ョ Function 繧ェ繝悶ず繧ァ繧ッ繝医�螳溯」�ウ輔�繧ャ繧、繝峨Λ繧、繝ウ縺ォ菴ソ逕ィ縺輔l繧九%縺ィ繧呈э蝗ウ縺励↑縺�ゅb縺」縺ィ險縺医�縲∝ョ滄圀縺ォ螳溯」��縲�2 縺、莉・荳翫�邨仙粋縺輔l縺� Function 繧ェ繝悶ず繧ァ繧ッ繝医� [[Scope]] 繝励Ο繝代ユ繧」縺ョ蟾ョ縺悟、夜Κ逧�↓隕ウ貂ャ縺輔l縺壹√◎縺ョ蝣エ蜷育オ仙粋縺輔l縺� Function 繧ェ繝悶ず繧ァ繧ッ繝医�邨�r菴懊i縺壹↓蜷後§ Function 繧ェ繝悶ず繧ァ繧ッ繝医r蜀堺スソ逕ィ縺吶k縺ィ縺�≧譎ゅr讀懃衍縺吶k縺九b縺励l縺ェ縺�ゅ%縺ョ讓呎コ悶�蜊倥↓ ECMAScript 繝励Ο繧ー繝ゥ繝�縺ォ縺ソ繧峨l繧区険繧玖�縺��莉墓ァ倥〒縺ゅk縺ョ縺ァ縲√%繧後�蜷域ウ慕噪縺ェ譛驕ゥ蛹悶〒縺ゅk縲�
FormalParameterList 縺ァ謖�ョ壹&繧後k驕ク謚樒噪縺ェ繝代Λ繝。繝シ繧ソ縺ョ繝ェ繧ケ繝医:unctionBody 縺ァ謖�ョ壹&繧後k譛ャ譁�ヾcope 縺ァ謖�ョ壹&繧後k繧ケ繧ウ繝シ繝鈴」骼悶r荳弱∴繧峨l縲:unction 繧ェ繝悶ず繧ァ繧ッ繝医�谺。縺ョ繧医≧縺ォ逕滓�縺輔l繧�:
new
Object() 縺ォ繧医j逕滓�縺輔l繧九°縺ョ繧医≧縺ォ縲∵眠縺励>繧ェ繝悶ず繧ァ繧ッ繝医r逕滓�縺吶k縲�NOTE prototype 繝励Ο繝代ユ繧」縺ッ縲∝推髢「謨ー縺ォ閾ェ蜍慕噪縺ォ逕滓�縺輔l縲�未謨ー縺後さ繝ウ繧ケ繝医Λ繧ッ繧ソ縺ィ縺励※蛻ゥ逕ィ縺輔l繧句庄閭ス諤ァ繧定ィア蜿ッ縺吶k縲�
繧ケ繝�ャ繝� 1 縺ッ螳溯」�↓縲。 縺� A 縺ォ萓晏ュ倥@縺ェ縺�→縺薙m縺ョ蜈・繧悟ュ舌�髢「謨ー B 繧呈戟縺、髢「謨ー A 縺ョ荳闊ャ逧�↑繧ア繝シ繧ケ縺ョ譛驕ゥ蛹悶r險ア蜿ッ縺吶k縲ゅ%縺ョ繧ア繝シ繧ケ縺ァ縺ッ螳溯」�� B 縺ョ縺溘a縺ォ A 縺悟他蜃コ縺輔l繧句コヲ縺ォ豈主屓譁ー縺励>繧ゅ�繧堤函謌舌☆繧倶サ」繧上j縺ォ蜷後§繧ェ繝悶ず繧ァ繧ッ繝医�蜀榊茜逕ィ繧定ィア蜿ッ縺輔l繧九ゅせ繝�ャ繝� 13 縺ッ縺薙�譛驕ゥ蛹悶r驕ク謚樒噪縺ォ縺吶k; 縺薙l繧貞ョ溯」�@縺ェ縺�%縺ィ繧帝∈謚槭☆繧句ョ溯」��縲√せ繝�ャ繝� 2 縺ォ騾イ繧縲�
萓九∴縺ー縲√%縺ョ繧ウ繝シ繝�:
function A() { function B(x) {return x*x;} return B; } function C() { return eval("(function (x) {return x*x;})"); } var b1 = A(); var b2 = A(); function b3(x) {return x*x;} function b4(x) {return x*x;} var b5 = C(); var b6 = C();
縺ョ荳ュ縺ァ縲∝ョ溯」��縲|1 縺ィ b2 縺ョ邨仙粋繧定ィア蜿ッ縺輔l繧九ゅ□縺瑚ヲ∵アゅ�縺輔l縺ェ縺�ょョ滄圀縲√◎繧後i縺ョ [[Scope]] 繝励Ο繝代ユ繧」髢薙�驕輔>繧呈、懃衍縺吶k譁ケ豕輔′縺ェ縺��縺ァ縲|1 縺ィ b2 繧貞酔縺倥が繝悶ず繧ァ繧ッ繝医↓菴懈�縺励※繧ゅh縺�ゆク譁ケ縲∝ョ溯」��繧ス繝シ繧ケ繧ウ繝シ繝峨�遲峨@縺上↑縺�(13.1.1) b3 縺ィ b4 繧堤オ仙粋縺励※縺ッ縺ェ繧峨↑縺�ゅ∪縺溷ョ溯」��縲�2 縺、縺ョ逡ー縺ェ繧� eval 蜻シ縺ウ蜃コ縺励〒逕滓�縺輔l繧九◆繧√↓繧ス繝シ繧ケ繧ウ繝シ繝峨�遲峨@縺上↑縺� b5 縺ィ b6 繧らオ仙粋縺励※縺ッ縺ェ繧峨↑縺��
螳滄圀縲√◎繧後�縲√◎繧後i縺ョ [[Scope]] 繝励Ο繝代ユ繧」髢薙↓驕輔>縺瑚ヲ九i繧後↑縺�%縺ィ繧貞ョ溯」�′險シ譏弱〒縺阪√◎繧後〒 1 縺、縺ョ繧ェ繝悶ず繧ァ繧ッ繝医r蜀堺スソ逕ィ縺ァ縺阪k譎ゅ↓縺ョ縺ソ縲�2 縺、縺ョ Function 繧ェ繝悶ず繧ァ繧ッ繝医�邨仙粋縺ォ逕溽肇逧�□繧阪≧縲ゅ%縺ョ繝昴Μ繧キ繝シ縺ォ蠕薙≧縺薙→縺ォ繧医▲縺ヲ縲∝ョ溯」��縲√◎繧瑚�菴薙↓邨仙粋縺励※縺�k繧ェ繝悶ず繧ァ繧ッ繝医�遨コ陌壹↑繧ア繝シ繧ケ縺ォ驕ュ驕�☆繧九□縺代↓縺ェ繧九�
Function 繧ェ繝悶ず繧ァ繧ッ繝� F 縺ョ [[Call]] 繝励Ο繝代ユ繧」縺悟他蜃コ縺輔l繧九→縺阪∵ャ。縺ョ繧ケ繝�ャ繝励′蜿悶i繧後k:
this
蛟、繧呈ク。縺吶�throw
縺ェ繧峨�縲ヽesult(2).value 繧呈兜縺偵k縲�Function 繧ェ繝悶ず繧ァ繧ッ繝� F 縺ョ [[Construct]] 繝励Ο繝代ユ繧」縺悟他蜃コ縺輔l繧九→縺阪∵ャ。縺ョ繧ケ繝�ャ繝励′蜿悶i繧後k:
this
蛟、縺ィ縺励※謠蝉セ帙@縲∝シ墓焚蛟、縺ィ縺励※ [[Construct]] 縺ォ貂。縺輔l縺溷シ墓焚繝ェ繧ケ繝医r謠蝉セ帙☆繧九�