請問大家為什么不能用btnArr[0].onclick=animate(200);這不是函數直接調用嗎?
函數的直接調用
慕勒小柒
2017-08-06 17:59:39
TA貢獻16條經驗 獲得超7個贊
animate(200);??//因為后面有括號,所以函數調用了
//沒有名字的函數稱為匿名函數,內部代碼不會執行,因為沒調用
function()?{
????//執行代碼??注意??我這只是舉個例子??匿名函數不能這樣直接寫??會報錯的
}
//匿名函數后面跟個括號,會執行內部代碼
function()?{
????//執行代碼??注意??我這只是舉個例子??匿名函數不能這樣直接寫??會報錯的
}();
//然后我們說說事件,事件(onclick)會幫我們調用函數體內部代碼
//匿名函數是被事件調用的,他不會自己執行,他不執行,animate(200)也不會執行
//這么寫的目的,是想通過按鈕的點擊,來控制函數的執行
//而不是btnArr[0].onclick=animate(200);??這樣會直接調用,事件(onclick)綁定就失去了意義
//所以你圖里的代碼是有執行順序的,你再理一理TA貢獻1條經驗 獲得超1個贊
btnArr[0].onclick = animate(200); ? 如果直接在函數名之后加() ? 函數會直接調用,跟事件類型沒有關系 ? ??btnArr[0].onclick= function(){ animate(200);?} ? 這樣寫 ?綁定單擊事件是個匿名函數(不能直接調用),必須點擊元素才能調用 ??
TA貢獻5條經驗 獲得超3個贊
小括號除了用來傳參以外,還用立即執行的意思,故平常不傳參的話可寫成btnArr[0].onclick=animate;
如果寫成btnArr[0].onclick=animate();那么,沒等到元素被點擊,就會執行animate函數,所以要傳參時,將函數寫到匿名函數里,避免立即執行。
舉報