【问题标题】:Is it possible to force JavaScript to declare variables before use?是否可以强制 JavaScript 在使用前声明变量?
【发布时间】:2011-05-26 04:30:55
【问题描述】:

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

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

    是的,可以使用strict mode 执行此操作。您可以通过将包含字符串文字 "use strict" 的语句放在文件或函数的顶部来启用它,以启用该范围的严格模式。

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

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

    严格模式

    JavaScript 的严格模式是一种选择加入受限制的 JavaScript 变体的方法,从而隐式选择退出“sloppy mode”。严格模式不仅仅是一个子集:它有意具有与普通代码不同的语义。

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

    【讨论】:

    • 据我所知,严格模式仅在 Firefox 中实现。我在其他任何地方都找不到它。严格模式是危险的,因为它的作用域是如何工作的。它适用于包含的文件,但不适用于内部函数。
    • @yakatz:Chrome 至少有部分支持。 Try this test 看看你的浏览器对它的支持程度。
    • Chrome 12(测试版):37/38。 IE9:0/38 ;-)
    • @yakatz,如果“use strict”出现在程序/文件的顶部,则它适用于该程序/文件中声明的所有函数。如果它出现在函数体的顶部,那么它适用于该函数以及该函数中定义的所有闭包。
    • 如果严格模式所做的只是在使用前强制声明变量,那么它是否只在 Firefox 中工作也没关系,因为(出于这个特定目的)您可以针对该浏览器进行测试 - 大概很快就会发现你错过了声明的地方。但是,严格模式也会做其他事情,所以它不是解决这个问题的好方法。更好的解决方案是像 www.jslint.com 或 www.javascriptlint.com 这样的验证器——尽管出于某种原因,后者认为检查未声明的变量是我默认需要的“高级”功能。
    【解决方案2】:

    编辑:这个答案现在不正确;请参阅上面的answer"use strict";(但JSLint 仍然很方便)。

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


    您正在寻找的功能有时在其他语言中称为Option Explicit(我认为它来自Visual Basic)。 JavaScript 没有。 如果您正在寻找检查变量使用情况的方法,请尝试JSLint

    【讨论】:

    • +1 用于 JSLint 和类似工具 - Javascript 有更多的陷阱,而不仅仅是意外的全局变量需要担心。
    猜你喜欢
    • 2021-11-26
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2019-10-14
    相关资源
    最近更新 更多