JavaScript ã® this ãã¼ã¯ã¼ãã«çµã³ã¤ããããå¤ã¯ã©ã®ããã«æ±ºå®ãããã®ã (è¨èªä»æ§ã®èª¬æ)
æè¿ JavaScript ã® this ãã¼ã¯ã¼ãã«ã¤ãã¦ã®è¨äºãããã¤ãè¦ãã㦠ãããããèªåãæ this ãã¼ã¯ã¼ãã«ã¤ãã¦è¨äºãæ¸ãããªã¼ã ã¨æã£ã¦ å¤ãè¨äº ãè¦è¿ãã¦ã¿ãã®ã§ããã颿°å¼ã³åºãã®ãã¨ãã説æãã¦ãªãã£ãã®ã§æ¹ã㦠this ãã¼ã¯ã¼ãã®å
¨è¬çãªè©±ãæ¸ãã¦ããããã¨æãã¾ãã æ¬è¨äºã¯ ECMA-262 5.1th ã«åºã¥ãã¦ãã¾ãã åå¿è
åãã® this ãã¼ã¯ã¼ãã®ä½¿ãæ¹ã®æéã示ãã¦ããããã§ã JavaScript å¦çç³»ã®å®è£
ã®èª¬æããã¦ããããã§ããªããJavaScript è¨èªã³ã¢ã®ä»æ§ã説æãã¦ãããã¨ã«æ³¨æãã¦ãã ããã
- ECMA-262 5.1th
: JavaScript ã®è¨èªã³ã¢é¨å (ECMAScript) ã®è¨èªä»æ§ (ãã¼ã¸ã§ã³ 5.1)
åå¿è
åãã® this ãã¼ã¯ã¼ãå¨ãã®æé
ãã®è¨äºã®æå¾ã® ãã¾ã¨ãã ã«ãèªåã JS æ¸ãã¨ãã« this ãã¼ã¯ã¼ãã§ã¯ã¾ããªãããã«ããããã®æéãæ¸ãã¦ã¾ãã®ã§ãããã°ã覧ãã ããã
æè¿è¦ãè¨äºã«ã¤ãã¦
- JavaScript の this を理解する - tacamy memo
: Java ã¦ã¼ã¶ã¼ããè¦ã JavaScript ã®
thisãã¼ã¯ã¼ãã«ã¤ãã¦; æ··ä¹±ããããç®æã«ã¤ãã¦æèã®æµãããããæãã§èª¬æããã¦ãã®ã§ Java ã¨ããã JS ã«æ¥ã人ã«ã¯è¯ããã; å³å¯ãã«æ¬ ããã®ã¯ã¡ãã£ã¨æ°ã«ãªã - JavaScriptのthisの覚え方 #JavaScript - Qiita
: ããã人ã«ã¯ãããã®ãããããªããã©ã©ããå¼ã£ãããæãããã; ãä½ãã«æå±ã ã£ã¦ã©ãããæå³ãªãã ? ã¨æã£ãã *1; ã颿°å¼ã³åºãæã«
thisã®å¤ã決ã¾ãã ã¨ãããããªèª¬æãããã°ãã£ã¨ããããããæ°ããã - JavaScriptのthis - Write and Run
: è¨ããã¨ããã¨ããã¯ããããã©ããã¬ã·ã¼ãã ã¨ããè¨èã§å ¨é¨çã¥ãããã¦ãå°ããã£ã¦æã£ã; ã¾ã大ä½ããããçè§£ããã¦ããã°æ··ä¹±ã¯ããªãã¨æã
this ãã¼ã¯ã¼ãã¨ã¯ä½ã
ãããã this ãã¼ã¯ã¼ãã¨ã¯ä½ãã¨ãã話ã
ECMA-262 ã«ã¯ãâThe
this keyword evaluates to the value of the ThisBinding of the current execution context.â (ES-11.1.1) ã¨æ¸ããã¦ãã¾ã *2ã ã¤ã¾ããthis ãã¼ã¯ã¼ãã¨ããã®ã¯å®è¡ã³ã³ããã¹ãã«çµã³ã¤ãã¦ãããã®ãªããã§ãã
ã§ã¯å®è¡ã³ã³ããã¹ã (ES-10.3) ã¨ããã®ã¯ä½ãªã®ãã¨ãã話ã«ãªãããã§ãããè¦ã¯å®è¡å¯è½ã³ã¼ãã«é¢ãã夿°ã®ç®¡çããããã®ã¨æãã°è¯ãã§ããã *3ã ä¾ãã°ã颿°å
ã§å®ç¾©ããã夿°ã¯ããã®é¢æ°ã³ã¼ãã«çµã³ã¤ãã¦ããå®è¡ã³ã³ããã¹ãå
ã§ç®¡çããã¦ãã¾ãã ããã¦ãå®è¡ã³ã³ããã¹ãã«ãã£ã¦ç®¡çããããã®ã®ãã¡ã® 1 ã¤ã« thisBinding ãããããã§ãã
å®è¡ã³ã³ããã¹ããçæãããã®ã¯ãæ°ãã *4 å®è¡å¯è½ã³ã¼ãã«å¶å¾¡ãç§»ãã¨ãã§ãã ããã¦ããã®ã¨ãã« ThisBinding ã®å¤ãã»ããããã¾ã (ES-10.4)ã
ããã§èª¬æãããã¨ãç°¡æ½ã«è¨ãã¨ããthis ãã¼ã¯ã¼ããè©ä¾¡ããã¨ãã®å¤ã¯ããã® this ãã¼ã¯ã¼ãã使ããã¦ããå®è¡å¯è½ã³ã¼ãã«å¶å¾¡ãç§»ã£ãã¨ãã«æ±ºå®ããããã®ã§ããã ã¨ãããã¨ã«ãªãã¾ãã
3 種é¡ã®å®è¡å¯è½ã³ã¼ãã¨ããããã®å ´åã® this ã®å¤ã®æ±ºå®æ¹æ³
ECMAScript ã«ããã¦ã¯ãå®è¡å¯è½ã³ã¼ãã«ã¯ 3 種é¡ããã¾ã (ES-10.1)ã
- ã°ãã¼ãã«ã³ã¼ã (Global Code)
- Eval ã³ã¼ã (Eval Code)
- 颿°ã³ã¼ã (Function Code)
ã¾ãèªãã§åã®ãã¨ãã ã¨æãã®ã§èª¬æã¯ãã¾ããã 詳細㯠ECMA-262 ãè¦ã¦ãã ããã ããã§ã¯ãããããã®å®è¡å¯è½ã³ã¼ãã«ããã this ãã¼ã¯ã¼ãã®å¤ (ããªãã¡ ThisBinding ã®å¤) ã®æ±ºãããæ¹ã«ã¤ãã¦èª¬æãã¾ãã
ã°ãã¼ãã«ã³ã¼ãã«ããã ThisBinding
ã°ãã¼ãã«ã³ã¼ãã®å®è¡ã³ã³ããã¹ãã«å¶å¾¡ãå
¥ã£ãã¨ã (ES-10.4.1) ã«ã¯ãThisBinding ã«ã°ãã¼ãã«ãªãã¸ã§ã¯ããã»ããããã¾ã (ES-10.4.1.1)ã
Eval ã³ã¼ãã«ããã ThisBinding
eval颿°ã®å¼ã³åºãå´ã®ã³ã³ããã¹ã (calling context) ãåå¨ããªãå ´åãã¾ãã¯eval颿°ã direct call (ES-15.1.2.1.1) ãããããã§ã¯ãªãå ´åã¯ãã°ãã¼ãã«ã³ã¼ãã«å¶å¾¡ãç§»ãã¨ãã¨åæ§ã«å®è¡ã³ã³ããã¹ããåæåããã¾ã- ã¤ã¾ãã
ThisBindingã®å¤ã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ãã«ãªãã¾ã - å¼ã³åºãå´ã®ã³ã³ããã¹ããåå¨ããªãå ´åã¨ããã®ã¯ã
eval颿°ã«æååã弿°ã¨ãã¦æ¸¡ããå ´åãã¨æã£ã¦ãã¾ããããããããªãã§ã
- ã¤ã¾ãã
- ãã以å¤ã®å ´åã
ThisBindingã®å¤ã¯å¼ã³åºãå´ã®ã³ã³ããã¹ãã«ãããThisBindingã®å¤ã¨åãã«ãªãã¾ã
Strict Mode ã§ã¯è²ã
㨠eval 颿°ã®åä½ãå¤ãã£ãããã¾ãããThisBinding ã®å¤ã¯ strict mode ã§ãããã§ãªãã¦ãå¤åã¯ãªãã¨æã£ã¦ãã¾ã (èªä¿¡ãªã)ã 詳細㯠ECMA-262 5.1th の 10.4.2 ãã覧ãã ããã
颿°ã³ã¼ãã«ããã ThisBinding
æå¾ã«ã颿°ã³ã¼ãã«ããã ThisBinding ã®æ±ºãããæ¹ (ES-10.4.3) ã説æãã¾ãã
ã¾ãåºæ¬çãªãã¨ã¨ãã¦ã颿°ã®å¼ã³åºãå´ããä¸ãããã this å¤ãå®è¡ã³ã³ããã¹ãã® ThisBinding ã®å¤ã«ãªã ã¨ãããã¨ãããã¾ã (ä¾å¤ãããå¾è¿°)ã 颿°ã®å¼ã³åºãå´ã¨ããã®ã¯ãå³å¯ã«å®ç¾©ããã¨ãå¼ã³åºããã颿°ãªãã¸ã§ã¯ãã®å
é¨ã¡ã½ãã [[Call]] (ES-13.2.1) ãå¼ã³åºãã¦ããã¨ããã§ãã (å
é¨ã¡ã½ãã [[Call]] ã¨ããã®ã¯ãè¨èªä»æ§ã®èª¬æã®ããã«ä½¿ããã¦ããã¡ã½ããã§ãã) [[Call]] ã¯ä»¥ä¸ã®ãããªç®æã§å¼ã³åºããã¾ãã
- é常ã®é¢æ°å¼ã³åºãã®å¼ :
[1,2,3].push(1)ã®ãããªå¼ã®è©ä¾¡æ Function.prototype.callã¡ã½ãããFunction.prototype.applyã¡ã½ããã®ä¸Function.prototype.bindã¡ã½ããã«ããçæããã颿°ãªãã¸ã§ã¯ãã®å é¨ã¡ã½ãã[[Call]](ES-15.3.4.5.1) ã®ä¸ *5- å
é¨ã¡ã½ãã
[[Construct]](ES-13.2.2) ã®ä¸ : å é¨ã¡ã½ãã[[Construct]]ãå¼ã³åºãããã®ã¯newæ¼ç®åãç¨ããå¼ã®è©ä¾¡æ (ES-11.2.2)
ä¾å¤ã®è©±
ã颿°ã®å¼ã³åºãå´ããä¸ãããã this å¤ãå®è¡ã³ã³ããã¹ãã® ThisBinding ã®å¤ã«ãªãã ã¨è¨ãã¾ããããæ£ç¢ºãªä»æ§ã¯ ECMA-262 5.1th の 10.4.3 ã«æ¸ããã¦ãã¾ãã ããã§ãã thisArg ã¨ããã®ã¯ã颿°ãªãã¸ã§ã¯ãã®å
é¨é¢æ° [[Call]] å¼ã³åºãæã«æ¸¡ããã this å¤ã®ãã¨ã§ãã
- 1. 颿°ã³ã¼ãã strict code ã§ããã°ã
thisArgãThisBindingã«ãªã- 2. ããã§ãªãå ´åã§ã
thisArgãnullãundefinedã§ããã°ãThisBindingã«ã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ããã»ããããã- 3. ããã§ãªãå ´åã§ã
Type(thisArg)ããªãã¸ã§ã¯ãã§ãªããªãã°ãThisBindingã«ã¯ToObject(thisArg)ãã»ããããã- 4. ããã§ãªãå ´åã¯ã
ThisBindingã«ã¯thisArgãã»ããããã
ã¤ã¾ããstrict mode ãããªãã¦ãthis å¤ã¨ãã¦æ¸¡ãããå¤ããªãã¸ã§ã¯ããããªããã°ãthis å¤ããã®ã¾ã¾ this ãã¼ã¯ã¼ãã®å¤ã«ãªãããã§ã¯ãªããã¨ãããã¨ã§ãã
é常ã®é¢æ°å¼ã³åºã (Function Call)
é常ã®é¢æ°å¼ã³åºãã®å¼ãã©ã®ããã«è©ä¾¡ããããã«ã¤ãã¦ã¯ãECMA-262 5.1th の 11.2.3 ã«æ¸ããã¦ãã¾ãã
颿°å¼ã³åºãã®å½¢å¼ã¯ MemberExpression Arguments ã¨ãããã®ã§ãMemberExpression ãå¼ã³åºããã颿°ã表ãå¼ (夿°ã ã£ãã颿°å¼ã ã£ãã)ãArguments ãæ¬å¼§ã§ããããã弿°ã®ãªã¹ãã§ãã 颿°å¼ã³åºãæã®æé (11.2.3 ç¯ã«æ¸ããã¦ããå
容ã訳ãããã®) ã以ä¸ã«ç¤ºãã¾ãã
- 1. MemberExpression ã®å®è¡çµæã ref ã¨ãã
- 2. GetValue(ref) ã®çµæã func ã¨ãã
- 3. Arguments ã®å®è¡çµæã argList ã¨ãã
- 4. Type(func) ã Object ã§ãªããã° TypeError ä¾å¤ãçºçããã
- 5. IsCallable(func) ã false ãªã TypeError ä¾å¤ãçºçããã
- 6. Type(ref) ã Reference ã®å ´å:
- a. IsPropertyReference(ref) ãçã®å ´å:
- i. GetBase(ref) ã®çµæã thisValue ã¨ãã
- b. ããã§ãªãå ´å (ref ã® base 㯠Environment Record):
- i. GetBase(ref) ã®ã¡ã½ãã ImplicitThisValue ãå¼ã³åºããçµæã thisValue ã¨ãã
- 7. ããã§ãªãå ´å (Type(ref) ã Reference ã§ãªã):
- a. thisValue 㯠undefined
- 8. this ã®å¤ã¨ã㦠thisValue ãã弿°ãªã¹ãã¨ã㦠argList ãæä¾ã㦠func ã®å é¨ã¡ã½ãã [[Call]] ãå¼ã³åºãããã®çµæãè¿ã
ããããããªãããç¥ãã¾ããããReference åã¨ã¯ä½ã *6ããªã©ã詳細ã«èª¬æãã ãã¨é·ããªã£ã¦ãã¾ãã®ã§ãå
·ä½ä¾ãæãã¦èª¬æãã¾ãã
obj.function_name()ã¨ããããã«ãobj ã®ããããã£ã¨ãã¦é¢æ°ãåç
§ãã¦é¢æ°å¼ã³åºããè¡ã£ãå ´å (6.a ã®å ´å)ãã¾ãã¯with( obj ) {
function_name(); // function_name 㯠obj ã®ããããã£
} ã¨ãã形㧠with æã使ã£ã¦é¢æ°ãåç
§ãã¦é¢æ°å¼ã³åºããè¡ã£ãå ´å (6.b ã®ç¹æ®ãªå ´å)ãthisValue ã¯ãããã obj ã¨ãªãã¾ãã 䏿¹ã§var function = function() { ... };
function(); ã®ããã«ã颿°ãåç
§ãã¦ãã屿夿°ã使ã£ã¦é¢æ°å¼ã³åºããè¡ã£ãå ´å (6.b ã®å ´å)ãã¾ãã¯(function() { ... })(); ã¨ããããã«é¢æ°å¼ã§ä½æãã颿°ããã®ã¾ã¾å¼ã³åºããããªå ´å (7 ã®å ´å)ãthisValue 㯠undefined ã¨ãªãã¾ããããã§æ±ºå®ãã thisValue ããthis å¤ã¨ãã¦å
é¨é¢æ° [[Call]] ã«æ¸¡ããã¾ãã
Function.prototype.call ã¡ã½ããã Function.prototype.apply ã¡ã½ãã
ECMA-262 5.1th の 15.3.4.4 ã ECMA-262 5.1th の 15.3.4.3 ãè¦ãã°ãããããã«ããããã®ã¡ã½ããã«æ¸¡ããã第 1 弿°ããã®ã¾ã¾ this å¤ã¨ãã¦å
é¨é¢æ° [[Call]] ã«æ¸¡ããã¾ãã
Function.prototype.bind ã¡ã½ããã«ãã£ã¦çæããã颿°ãªãã¸ã§ã¯ãã®å
é¨ã¡ã½ãã [[Call]] ã®ä¸
Function.prototype.bind ã¡ã½ããã«ããçæããã颿°ãªãã¸ã§ã¯ãã¯ãbind ã¡ã½ããã®ç¬¬ 1 弿°ã¨ãã¦æ¸¡ãããå¤ãå
é¨ãããã㣠[[BoundThis]] ã«ä¿æãã¦ãã¾ãã ããã¦ãå
é¨ã¡ã½ãã [[Call]] ã¨ãã¦ãé常ã®é¢æ°ãªãã¸ã§ã¯ãã¨ã¯ç°ãªããã®ããã£ã¦ãã¾ãã ãã® [[Call]] ã¡ã½ãã (ES-15.3.4.5.1) ã®å¦çãè¦ãã¨ãå
é¨ãããã㣠[[BoundThis]] ã this å¤ã¨ãã¦ãå¼ã³åºãå¯¾è±¡é¢æ°ãªãã¸ã§ã¯ãã® [[Call]] ã¡ã½ãããå¼ã³åºãã¦ãã¾ãã çµå±ã®ã¨ãããbind ã¡ã½ããã®ç¬¬ 1 弿°ã¨ãã¦æ¸¡ãããå¤ããã®ã¾ã¾ this å¤ã¨ãã¦æ¸¡ãããããã§ããã
new æ¼ç®åã«ããã³ã³ã¹ãã©ã¯ã¿å¼ã³åºã
ECMA-262 5.1th の 11.2.2 ãè¦ãã¨ãnew æ¼ç®åã®å³è¾ºã«æ¸ããã颿°ãªãã¸ã§ã¯ãã®å
é¨ã¡ã½ãã [[Construct]] ãå¼ã³åºããããã¨ããããã¾ãã ECMA-262 5.1th の 13.2.2 ãè¦ãã¨ã[[Construct]] ã®ä¸ã§æ°ãã«çæããããªãã¸ã§ã¯ãããæçµçã«é¢æ°ã® [[Call]] ã¡ã½ããã« this å¤ã¨ãã¦æ¸¡ããããã¨ããããã¾ãã
ãã®ä»
ãã®ä»ã«é¢æ°ãªãã¸ã§ã¯ãã®å
é¨ã¡ã½ãã [[Call]] ãå¼ã°ãããã¨ã£ã¦ãããã ãããã ãããã¾ããã
ã¾ã¨ã
ã¾ã¨ãã¨ããããå人çã« JavaScript ãæ¸ãã¨ãã« this ãã¼ã¯ã¼ãã§ã¯ã¾ããªãããã«æ°ãä»ãã¦ãããã¨ã ç´°ããæåã¯ææ¡ãã¦ãªãã¦ããã®ã§ã以ä¸ã®ãã¨ãå®ãã° this ãã¼ã¯ã¼ãã§ã¯ã¾ããã¨ã¯ãªãã¯ãã§ãã
thisãã¼ã¯ã¼ãã®å¤ã¯å®è¡ã³ã³ããã¹ãã«çµã³ä»ããããå¤ã§ãããæ°ããå®è¡ã³ã³ããã¹ãã«å¦çãç§»ã£ãã¨ãã«æ±ºå®ããã- ã°ãã¼ãã«ã³ã¼ãã§ã¯
thisãã¼ã¯ã¼ãã®å¤ã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ã - 颿°å
ã§ã¯
thisãã¼ã¯ã¼ãã®å¤ã¯é¢æ°ã®å¼ã³åºããæ¹ã§æ±ºã¾ã - Eval ã³ã¼ãã§ã¯ã¡ããã¨çè§£ãã¦ãªãéã
thisãã¼ã¯ã¼ãã¯ä½¿ãã¹ãã§ãªã *7
颿°å®ç¾©æã® this ãã¼ã¯ã¼ã
- 颿°ãå®ç¾©ããã¨ãã«ã¯ã
- ããã
obj.methodName()å½¢å¼ãnew Function()å½¢å¼ã§å¼ã³åºããããã¨ãæå¾ ããã颿°ã§ããã°ã颿°ã³ã¼ãã®ä¸ã§thisãã¼ã¯ã¼ãã使ã£ã¦ãã - ããã§ãªããã°
thisãã¼ã¯ã¼ãã使ã£ã¦ã¯ãããªã
- ããã
颿°ã®æ±ãæ¹
obj.methodName()å½¢å¼ã§å¼ã³åºããããã¨ãæå¾ ããã颿°ã§ããã°ã- å¥ã®é¢æ°ã®å¼æ°ã¨ãã¦ãã®é¢æ°ã渡ãã¨ãã弿°ã«ä»£å
¥ããã¨ããå¥ã®ãªãã¸ã§ã¯ãã®ããããã£ã«ãã®é¢æ°ã代å
¥ããã¨ãã¯ãã¦ã¯ãããªã
- ãã ããå¥ã®ãªãã¸ã§ã¯ãã®ããããã£ã«ä»£å ¥ãããã¨ã§ mix-in ã®ãããªæãã§ä½¿ããã¨ãæ³å®ããã¦ããå ´åã¯ãã®éãã§ã¯ãªã
- 颿°ãå¼ã³åºãã¨ãã¯
obj.methodName()å½¢å¼ã§å¼ã³åºããã¨- ãã ãã
Function.prototype.callãªã©ã§ThisBindingãæ¸ããããå ´åã¯ãã®éãã§ã¯ãªã
- ãã ãã
- å¥ã®é¢æ°ã®å¼æ°ã¨ãã¦ãã®é¢æ°ã渡ãã¨ãã弿°ã«ä»£å
¥ããã¨ããå¥ã®ãªãã¸ã§ã¯ãã®ããããã£ã«ãã®é¢æ°ã代å
¥ããã¨ãã¯ãã¦ã¯ãããªã
obj.methodName()å½¢å¼ã§å¼ã³åºããããã¨ãæå¾ ããã颿°ã§ãªããã° *8ãèªç±ã«å¥ã®å¤æ°ã«ä»£å ¥ããã颿°ã®å¼æ°ã«æ¸¡ããããã¦ãã
è£è¶³
ãã£ã¼ãããã¯ããã ããã®ã§ç´¹ä»ãã¾ãã ãããã¨ããããã¾ãã (ãã¨æãã ããã®ã§ã³ã³ã¹ãã©ã¯ã¿ã¨ãã¦ä½¿ãããå ´åã追è¨ãã¾ããã)
ãhoge.huga.bar()ã¯var foo = hoge.huga;foo.bar()ã¨å¼ã³åºãã¦ãããã£ã¦ã«ã¼ã«ãããæ¹ã親åãã // JavaScript ã® this ãã¼ã¯ã¼ãã«çµã³ã¤ããããå¤ã¯ã©ã®ããã«æ±ºå®ãããã®ã bit.ly/YKGMQV
— kyo agoãã (@kyo_ago) 2013å¹´2æ2æ¥ã¾ã hoge.fuga.bar ã¨ãã颿°ãå¥ã®å¤æ°ãããããã£ã«ä»£å
¥ããªããã°ããã¨ã hoge.fuga ãã©ãã (ä¾ãã° foo ã¨ãã夿°) ã«ä»£å
¥ãã¦ã foo.bar ã£ã¦å¼ã³åºããã¨ã«ãªããããä¸ã«æ¸ããæéã®ç¯çã§ã¯ããã®ã§ããã
ãããã¦èªã¿ãã
- JavaScript の this キーワードは何を指すのか - コールバック関数内では this を使ってはいけない
: 颿°å¼ã³åºãæã«
thisãã¼ã¯ã¼ããã©ã®ããã«æ±ºå®ãããã®ãã«ã¤ãã¦; ä»åã®è¨äºã®ãã¼ã¹ã¨ãªã£ãè¨äº - ECMAScript のレキシカル環境 ~catch 節のスコープのお話~
: å®è¡ã³ã³ããã¹ãã管çãã
ThisBinding以å¤ã®ãã®ã«é¢ãã話 (ã¹ã³ã¼ãã¨ã)
*1:ãµã³ãã«ã³ã¼ãèªãã°ãããã¨ã¯ãã
*2:ãªããããè±èªééã£ã¦ããããªæ°ãããã
*3:詳細㯠ECMA-262 5.1th ã® 10.3 ç¯ ãè¦ã¦ãã ãã
*4:ãããã¯ç¾å¨ã®å®è¡ã³ã³ããã¹ãã«é¢é£ããå®è¡å¯è½ã³ã¼ãã¨ã¯å¥ã®
*5:Function.prototype.bind ã¡ã½ããã«ããçæããã颿°ãªãã¸ã§ã¯ãã®å
é¨ã¡ã½ãã [[Call]] ã¯ãé常ã®é¢æ°ãªãã¸ã§ã¯ãã®å
é¨ã¡ã½ãã [[Call]] ã¨ã¯ç°ãªã£ã¦ãã
*6:ç°¡åã«ããã¨ãReference åã£ã¦ããã®ã¯ ECMA-262 ã§ä»æ§èª¬æã®ããã«ä½¿ããã¦ããåã§ãããèå¥åãããããã£ã®åå解決ã®éã«ãã®åã®å¤ãè¿ããã¾ãã Reference åã®å¤ã¯ãåå解決ã®å¯¾è±¡ã¨ãªã£ãååã«çµã³ä»ããããå¤ãä¿æããã¦ããå ´æ (base ã¨ãã; åå解決ã®å¯¾è±¡ãããããã£ã§ããã°ãã®ããããã£ããã¤ãªãã¸ã§ã¯ãã対象ãèå¥åã§ããã° Environment Recordããªã©) ãåå解決ã®å¯¾è±¡ã¨ãªã£ãååãªã©ããã¡ã¾ãã GatBase() ã§åå¾ã§ããå¤ãããã® base ã§ãã
*7:ãããã eval 颿°ãæ°è»½ã«ä½¿ãã¹ãã§ã¯ãªã
*8:ããªãã¡ this ãã¼ã¯ã¼ãã使ããã¦ããªã颿°ã new Function() å½¢å¼ã§å¼ã³åºããããã¨ãæå¾
ããã颿°ãªã®ã§ããã°