對象沒有call和apply方法,只有函數有;
apply可以將數組和類數組一次性的傳遞進函數中,call只能一個一個的傳;
請判斷代碼的輸出結果
7-2
因為return會立即結束函數,它后面的語句不會被執行,所以結果為3
請判斷代碼的輸出結果
7-6
1、document.write期望接收和輸出字符串,當接收的參數不為字符串時,會調用參數的toString方法,將其轉化成字符串輸出
2、 數組調用toString()后,會將其中的元素用逗號拼接起來變成字符串
3、 一般的對象調用toString()后返回[object Object]
重寫對象的toString()方法,就按照重寫方法的返回值輸出;
所以結果為
1,2,3;
[object Object];
調用了toString方法
請判斷代碼的輸出結果
7-8
1、 count()()這樣調用,每次都會創建一個新的局部作用域,num的值會不斷地被初始化為1【創建新的作用域就是每次count函數都重新執行一遍,num值被初始化為1 ,所以每次調用輸出的值都是1】
2、 return num++表示先返回num的值,再將num加1
3、 先將count()賦給fn,此時count()只調用了一次,接下來多次調用fn()的時候,count函數并沒有多次調用,num只會在count函數調用的時候被初始化,所以多次調用fn()的時候num不會被多次初始化【即fn=count()只執行了一次,也就是初始化了一次num值,后面調用fn是調用返回出來的函數】;
由于fn相當于count函數的內層函數(var fn=count();這行代碼執行后,就調用了count(),調用count后就將里面的函數賦值給了fn,所以說fn就相當于函數的內層函數了。),可以訪問count中的變量num,所以多次調用fn函數,會將num的值累加;【fn是一個全局變量,將返回出來的函數賦值給了它,并且這個函數中還用著num變量,所以num值不會被銷毀,每調用一次fn,num值就會在原來基礎上增加】
所以最終結果為1,1,1,1,2,3