console.log(5)的奇怪输出

Strange output with console.log(5)

本文关键字:输出 log console      更新时间:2023-09-26

我有一个最简单的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注入到head元素中。在mail.google.com中,控制台输出是4个5,后面跟着16个Resource interpreted as Other but transferred with MIME type undefined.。其他站点只显示20个5。

谁能解释一下这种行为?

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

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

(function () {
    var c = 0;
    setTimeout(function f() {
        if (++c > 20) return;
        console.log(5);
        setTimeout(f, 500);
    }, 500);
}());