var a = 0; function fn(){ ssss.call(null,a) // 为什么 定时器里面的匿名函数加上字符串跟直接执行不同??? setInterval("ssss()", 1000); setInterval(ssss(), 1000); } function ssss(){ console.log(++a) } fn();
請大神麻煩講解一下 裡面的原理
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
setInterval第一個參數接受字串,會把字串解析成函數語句執行。
首先我們看下W3C 的解釋setInterval 再看下
setInterval("ssss()", 1000);
setInterval(ssss(), 1000);
1.那麼執行的時候 就會報錯了;2.函數本體 ssss()
function ssss(){ console.log(++a) }
是沒有回傳值的 , 但是 注意 在fn 函數中有一句 ssss.call(null,a) 那麼 在fn 函數中就存在了回傳值了。而且回傳值 剛好 還是個函數 , 因此 符合setInterval 的函數要求, 會一直執行下去
不加雙引號的話,就要去掉圓括號,只寫函數名稱
setInterval第一個參數接受字串,會把字串解析成函數語句執行。
首先我們看下W3C 的解釋setInterval
再看下
setInterval("ssss()", 1000);
setInterval(ssss(), 1000);
1.那麼執行的時候 就會報錯了;
2.函數本體 ssss()
是沒有回傳值的 , 但是 注意 在fn 函數中有一句 ssss.call(null,a) 那麼 在fn 函數中就存在了回傳值了。而且回傳值 剛好 還是個函數 , 因此 符合setInterval 的函數要求, 會一直執行下去
不加雙引號的話,就要去掉圓括號,只寫函數名稱