?? ??? ? ??? ?????, ? ??? this? ? ??? ????? ??? ?? ????.
?? ??? ?? foo? foo() ?? ?? ?????. ??? ??? ???? ??? ?????? Window.foo()? ?? ??? ?? ???? ?????
?? ??????. ?????!
??? ?? ??? ??? ????. Foo? ?? ??? ????. (???? ?? ??) ??? ?? ??? ??? ????.
1. ??? ?? ??? ???? ?? ?? ?? ?? ?????.
2 . ??? ??? ? ?? ??? ?? ?? foo.fn.o()? ?? ?? ??? ??(??) ??
? ?????. o? this? fn? ?????
內(nèi)部函數(shù)
,即聲明在另一個函數(shù)體內(nèi)的函數(shù),都將會綁定到全局對象
上,這是JavaScript的設(shè)計缺陷
? ?? ??? ?? ??? ?? ??? this? ?? ??? ???? ??? ????? ??? ???, ?? ?? ?? ?? ??? ?????.
? ??? ??? ??? ?? 變量替代
的方法,約定俗成,可以使用self
或that
? ??? ? ??? ??? ??? ????.
?? ? ??? ??? ???.
1: ??? ??? ????? ??, ??? ????, ? ??? ?????. ??? ?? ???? ??? ???? ??:
function foo(){....}
foo();//
? ?? ?? ?? ???(?? ??? ???? ??? ??? ????) , ??? ??? '??? ?'??? ????. ???? window.foo()? ?????. ??? ??? ????? ??? ???? ?? ??? ???? ??? ???? ??? ?????. ???? ? ??? ??? window?? ?????.
2: ???? ? ??? ? obj ?? ????? foo()? ?????? ??? ???? 20:
? ??? ???? ???? ?????.
??? ?? ??? ?? ??? ? ????.
????? ?? ?? ??? ??? ? call?? apply? ??? ?????? ??? ????? ?? ? ? ????. ?? ??? ??? ?? ?? ?? ?????. ? ? ???? ? ?? ????? ?? ? foo ???? ?? this ????. call ???? ? ?? ????? null??? ???? ?? ?? ????? ?? ??? ? ?? ????? ?????. foo.call(), foo.call(null), foo.call(undefine))? ??? ???