Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript:全局变量泄漏_Javascript_Global Variables - Fatal编程技术网

javascript:全局变量泄漏

javascript:全局变量泄漏,javascript,global-variables,Javascript,Global Variables,每当我向Firefox提交插件时,我都会收到一封电子邮件,告诉我我的一些变量正在泄漏到全局范围。。。一旦他们告诉我我解决了问题。但在那之前,有没有办法(程序?)检查变量是否泄漏到全局范围 谢谢 两者都有,当您错过var时,将向您发出警告。两者都可以在Github(,)上使用,并且都可以使用Node.js、Rhino或您选择的任何其他非浏览器环境从命令行运行。它们甚至可以集成到您选择的文本编辑器/IDE中,并通过按键运行。函数中任何不以var开头的变量声明都将泄漏到全局范围。您可以检查这些工具。其

每当我向Firefox提交插件时,我都会收到一封电子邮件,告诉我我的一些变量正在泄漏到全局范围。。。一旦他们告诉我我解决了问题。但在那之前,有没有办法(程序?)检查变量是否泄漏到全局范围


谢谢

两者都有,当您错过
var
时,将向您发出警告。两者都可以在Github(,)上使用,并且都可以使用Node.js、Rhino或您选择的任何其他非浏览器环境从命令行运行。它们甚至可以集成到您选择的文本编辑器/IDE中,并通过按键运行。

函数中任何不以
var
开头的变量声明都将泄漏到全局范围。您可以检查这些工具。

其他人推荐的lint工具是一个很好的主意,它会指出问题所在,但是如果您有单元测试,您可以将泄漏全局数据的测试合并到这些工具中

在加载源代码之前先运行它

var globalsBeforeLoad = {};
(function () {
  for (var k in this) { globalsBeforeLoad[k] = true; }
})()
然后在加载代码后运行此命令

(function () {
  var leaked = [];
  for (var k in this) {
    if (!Object.hasOwnProperty.call(globalsBeforeLoad, k)) {
      leaked.push(k);
    }
  }
  if (leaked.length) { alert("You leaked " + leaked.join(", ")); }
})()

ECMAScript标准第5版引入了可选的“严格模式”,这迫使您使用更干净的JS子集。在严格模式下,如果您试图分配给未使用var关键字声明的变量,则会抛出ReferenceError

您可以在函数内部或整个文件中启用严格模式,方法是将此作为第一条语句:

"use strict";
对于你的问题,我推荐严格模式。它已经在主要浏览器的最新版本中实现。有关概述,请参见此处:


在每个函数的顶部声明所有变量

JavaScript最糟糕的特性是它对全局变量的依赖。全局变量是一个 在每个范围中都可见的变量。在非常小的程序中,全局变量可能是一种方便,但它们 随着程序越来越大,很快就会变得笨拙。因为全局变量可以由 在任何时候,它们都会显著地使程序的行为复杂化。全局变量的使用 降低了使用它们的程序的可靠性。 [...] 在大多数语言中,通常最好在首次使用的位置声明变量。结果证明这是一个坏消息 在JavaScript中练习,因为它没有块作用域。最好在列表顶部声明所有变量 每个功能

“JavaScript:Douglas Crockford的好部分。版权所有2008 Yahoo!Inc。,
978-0-596-51774-8.“

是的,这就是我所想的。。。虽然检查这些东西的工具很棒,但不难避免JS中有任何全局变量。不同的是,这里我需要一个工具。。。在那里,我不知道发生了什么……我没有注意到你是同一个人:)