JavaScript是否可以强制在使用变量之前声明变量?

7

是否可能通过JavaScript代码中的某些指令,在使用未声明的变量时引发警告或错误?

如果不可能,是否有一些插件可以强制Eclipse(或任何其他IDE)检测未声明的变量?

2个回答

8

是的,可以使用严格模式来实现这一点。您只需在文件或函数顶部放置一个包含字符串字面量"use strict"的语句即可启用该作用域的严格模式。

"use strict";
doesNotExist = 42; // this throws a ReferenceError

现在所有更新的浏览器都支持此功能。旧的浏览器不会抛出错误,因为"use strict";是一个有效的语句,并且被不支持它的浏览器简单地忽略。您可以在开发过程中使用它来捕获错误,但不要依赖它在用户的浏览器中引发异常。

严格模式

JavaScript的严格模式是一种选择进入受限制的JavaScript变体的方式,从而隐式地退出"宽松模式"。严格模式不仅仅是一个子集:它有意与普通代码具有不同的语义。

通过在任何其他语句之前包含语句"use strict";来调用整个脚本的严格模式。
(来源, 文档)


据我所知,Strict Mode只在Firefox中实现了。我在其他地方找不到它。Strict Mode的危险在于其作用域的工作方式。它适用于包含的文件,但不适用于函数内部。 - yakatz
@yakatz:Chrome浏览器至少有部分支持。尝试这个测试来查看它在你的浏览器中的支持情况。 - hammar
Chrome 12(beta):37/38。IE9:0/38;-) - yakatz
@yakatz,如果“use strict”出现在程序/文件的顶部,则适用于该程序/文件中声明的所有函数。如果它出现在函数体的顶部,则适用于该函数和在该函数中定义的所有闭包。 - Mike Samuel
4
如果严格模式只是强制在使用变量之前声明变量,那么它仅在Firefox中运行也没关系,因为(对于这个特定目的)你可以针对该浏览器进行测试——很快就会发现你漏掉了哪些声明。然而,严格模式还有其他作用,所以它并不是解决此问题的好方法。更好的解决方案是像www.jslint.com或www.javascriptlint.com这样的验证器,尽管后者认为检查未声明的变量是一个“高级”功能,而我希望它成为默认功能。 - nnnnnn

2

编辑:本回答已不正确;请参见"use strict";(如上述答案所示),但JSLint仍然很方便。

这个功能类似于VB/VBA的Option Explicit和PHP7的declare(strict_types = 1);


你要找的功能在其他语言中有时被称为Option Explicit(我认为它来自Visual Basic)。 JavaScript没有这个功能。 如果你想检查变量的使用情况,请尝试使用JSLint


2
+1 for JSLint和类似的工具 - JavaScript有很多需要担心的陷阱,不仅仅是意外的全局变量。 - hugomg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接