setTimeout疑惑

Author : lovecicy

其实对于这个函数的用法,一直很模糊。

MDN的文档中,setTimeout方法有两种语法:

1. setTimeout(func,delay,arg1,arg2...)
2. setTimeout(code,delay)

返回值是一个ID,可以在clearTimeout中作为参数,用于取消这个延时函数。

对于第二种语法,其实并不推荐,原因和eval()相同。

因此来说说第一种语法,func参数为要执行的函数名,不能带括号,除非你知道自己在干嘛,也不能用引号包围,否则就变成第二种语法了;delay参数为需要延迟的毫秒数;后面的参数为传递给func的参数,但是在IE9以前的浏览器中不支持这种语法,所以更多的时候只有两个参数。

在来说说在chrome下发现的问题:

我要让下面这段代码延时执行:

$('#test').addClass('test');

所以我写了这样一段代码:

setTimeout($('#test').addClass('test'),1000);

照例说哪个语法都不符合,但是在IE8下,它能正常执行并且不报错。在FF下,它也能执行,但是会报错:SyntaxError: missing ] after element list     test.html (第 18 行,第 8 列)。最奇怪的是在chrome下,它也能实现效果,也报错了,但是报的错却奇葩的让人看不懂啊:Uncaught SyntaxError: Unexpected identifier 除了这句话之外再无任何提示,没有写明出错的地方,也没有说哪个字符是unexpected的。

求解啊!!!


最近还发现了chrome中文环境下的最小字体设置:

在中文环境中,默认状态下chrome设置了最小字体为12像素,防止过小字体引起中文显示模糊。这时候如果设置了font size小于12px,那么字体将会以12px显示。在英文环境中则默认没有最小字体的限制。

如果要修改最小字体的设置,可以在设置->显示高级选项->网络内容->自定义字体中的最小字号设置。

standard
  1. luckyGirl - 2013 年 11 月 14 日 11:14 上午

    那段test的代码 我觉得是语法问题才会导致报错,第一个参数可以是函数或直接是代码,而$(‘#test’).addClass(‘test’);返回是一个对象并不是function,因此应该按照code的规则传入参数 即:
    setTimeout(“$(‘#test’).addClass(‘test’);”,1000)

    至于不同的报错,应该是不同浏览器对这一错误的处理方式不同

    回复
    • lovecicy - 2013 年 11 月 15 日 12:48 下午

      恩 有理

      回复
  2. luckyGirl - 2013 年 11 月 14 日 11:16 上午

    PS. 关于中文版Chrome问题也是TRAC的一个坑,要改会很恐怖……

    回复
    • lovecicy - 2013 年 11 月 15 日 12:48 下午

      这个我不管,让徐辉他们改吧

      回复

Have your say