var a = 0;
function fn(){
ssss.call(null,a)
// 为什么 定时器里面的匿名函数加上字符串跟直接执行不同???
setInterval("ssss()", 1000);
setInterval(ssss(), 1000);
}
function ssss(){
console.log(++a)
}
fn();
Bitte bitten Sie den Meister, das Prinzip dahinter zu erklären
setInterval第一个参数接受字符串,会把字符串解析成函数语句执行。
首先我们看下W3C 的解释setInterval
再看下
setInterval("ssss()", 1000);
setInterval(ssss(), 1000);
1.那么执行的时候 就会报错了;
2.函数本体 ssss()
是没有返回值的 , 但是 注意 在fn 函数中有一句 ssss.call(null,a) 那么 在fn 函数中就存在了返回值了。而且返回值 刚刚好 还是个函数 , 因此 符合setInterval 的函数要求, 会一直执行下去
不加双引号的话,就要去掉圆括号,只写函数名