使用console.log输出奇怪的输出(5)

时间:2012-01-03 11:53:30

标签: javascript google-chrome-extension

我有最简单的chrome扩展,其中包含内容javascript(没有别的):

script="\
c=0;\
(function f() {\
    if (++c>20) return;\
    console.log(5);\
    setTimeout(f, 500);\
})();\
";
scriptBlock = document.createElement('script');
scriptBlock.type = 'text/javascript';
scriptBlock.appendChild(document.createTextNode(script));
document.getElementsByTagName('head')[0].appendChild(scriptBlock);

这只是将一小块js注入头部元素。 在mail.google.com中,控制台输出为4五,然后是十六Resource interpreted as Other but transferred with MIME type undefined.每个其他网站只显示20五。

有人能解释一下这种行为吗?

2 个答案:

答案 0 :(得分:2)

您在脚本中使用全局变量。如果页面中的脚本使用具有相同名称的全局变量,它将更改变量中的值,而脚本将显示该值。

答案 1 :(得分:1)

正如@Guffa所说,您的全局变量可能会被覆盖。将其包含在闭包内将确保只能通过代码访问它。

(function () {
    var c = 0;

    setTimeout(function f() {
        if (++c > 20) return;

        console.log(5);

        setTimeout(f, 500);
    }, 500);
}());