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 的函数要求, 会一直执行下去
不加双引号的话,就要去掉圆括号,只写函数名