这会在全球范围内启用“use strict”吗?

2024-01-26

类似,但不一样,如何在全局范围内启用 ECMAScript“use strict”? https://stackoverflow.com/questions/4769477/how-to-enable-ecmascript-use-strict-globally

我已经买了并且建议启用 use strict。将其添加到两打 javascript 文件中会有点麻烦,因此全局启用它会很好。我最初考虑像这样添加到 main.js 的顶部:

"use strict" 
require({
    priority: ["jquery", "raphael", "myapp"] 
});

但我后来认为它可能只会为该文件启用它。然后我想到了这一点:

<script data-main="lib/main" src="lib/require.js">"use strict"</script>

其中任何一个都会全局启用 ECMAScript 5 严格模式吗?


TL;DR:

No, a "use strict" in one script元素不强加"use strict"关于其他中的代码script元素。它仅适用于它所属的源文本。

(另外,重新script问题末尾的标签:如果script元素有一个src,它所具有的任何内联文本都被视为“文档”并被忽略。)


Update:

现在规范中更清楚了(也许 ES5 中很清楚,但对我来说不是),是的,分开script出于以下目的,元素是分开的"use strict"。原始答案中的以下引用有略有改变 http://www.ecma-international.org/ecma-262/7.0/index.html#sec-strict-variant-of-ecmascript说“源文本”而不​​是“代码单元”,并且脚本和模块 http://www.ecma-international.org/ecma-262/7.0/index.html#sec-ecmascript-language-scripts-and-modules部分将进行更详细的介绍。


原答案:

规格 http://www.ecma-international.org/publications/standards/Ecma-262.htm says:

由于严格模式是在语法代码单元级别选择的,因此严格模式仅施加在此类代码单元内具有局部效果的限制。严格模式不会限制或修改必须跨多个代码单元一致运行的 ECMAScript 语义的任何方面。

(第 4.2.2 节)

所以问题是:不同script标记不同的语法代码单元?

V8(Chrome 中的 JavaScript 引擎)似乎相信它们are分开,所以放一个"use strict";在页面顶部的全局范围内将不起作用。也许它在我还没有找到的地方指定,但无论如何,这是一个合理的解释。

假设没有声明foo没有显示,这段代码成为了牺牲品隐式全局变量的恐怖 http://blog.niftysnippets.org/2008/03/horror-of-implicit-globals.html在正常模式下:

function test() {
    try {
      foo = "bar";
      display("foo = " + foo);
    }
    catch (e) {
      display("Exception: " + e);
    }
}

在正常模式下,这会创建一个新的全局变量foo值为“bar”并显示"foo = bar"信息。在严格模式下,会抛出异常,因为foo未定义。

如果我将此脚本标记放入页面中:

<script>
"use strict";
function test() {
    try {
      foo = "bar";
      display("foo = " + foo);
    }
    catch (e) {
      display("Exception: " + e);
    }
}
</script>

...我得到了预期的异常(活生生的例子 http://jsbin.com/olomel/2)。如果我把它们分开script不过,标签:

<script>
"use strict";
</script>
<script>
function test() {
    try {
      foo = "bar";
      display("foo = " + foo);
    }
    catch (e) {
      display("Exception: " + e);
    }
}
</script>

I don't得到异常(在 V8 上)(example http://jsbin.com/olomel/3)。如果您考虑一下浏览器和 JavaScript 引擎如何交互,这是合理的。

同样,如果该函数在另一个文件中关闭,我会这样做:

<script>
"use strict";
</script>
<script src="/inatoq"></script>

我没有得到例外(example http://jsbin.com/olomel/1),大概是出于同样的原因。

请注意您的示例标签:

<script data-main="lib/main" src="lib/require.js">"use strict"</script>

是无效的。 Ascript标签可能either have a src属性or内容,但不是两者。 (嗯,基本上;细节here http://www.w3.org/TR/html5/scripting-1.html#the-script-element[HTML5] 和here http://www.w3.org/TR/html401/interact/scripts.html#edef-SCRIPT[HTML 4.01]。)如果它有src元素,浏览器应该忽略内容,而且大多数浏览器都会忽略。最多。 :-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这会在全球范围内启用“use strict”吗? 的相关文章

随机推荐

  • JSON.stringify 缺少属性

    我正在编写一个自定义 console error 函数 以便每次发生错误时我都会收到一封电子邮件 要在电子邮件正文中发送错误 我使用JSON stringify 问题是它缺少一些属性 请参阅下面的两张图片 Email In console
  • 在MVC中使用Json.NET自动将mongodb ObjectId重新设置为字符串

    我有一个 MVC net 项目 并且正在使用 mongodb 在我的一些控制器中 我返回带有 ObjectId 的 JsonResult 我希望将 ObjectId 序列化为字符串 我发现了类似的问题并使用了这个答案 使用自定义JsonCo
  • 选择具有最小计数的行 (*)

    假设我有一个带有列的简单投票表 id primaryKey token int candidate int rank int 我想提取具有特定排名的所有行 按候选人分组 最重要的是仅使用最小计数 到目前为止我已经达到了 SELECT can
  • 自动布局(约束)与自动调整大小蒙版(弹簧和支柱)

    这些布局系统可帮助您调整大小 无论屏幕大小和方向如何 如果我有自动调整大小掩模 弹簧和支柱 这样的简单解决方案 为什么我应该使用自动布局 约束 当我开始使用自动布局时我也有同样的问题 自动布局可以做到这一切弹簧和支柱为我们提供以及更多 自动
  • 数据模板有多贵? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 I have 性能问题 https stackoverflow com q 38248842 1997232我正在努力挖掘原因 到目前为止 我不
  • Zuul 反向代理与 Keycloak 服务器

    我正在使用 Zuul 反向代理实用程序配置 Spring Cloud Angel SR6 应用程序 以隐藏内部服务端口 我的 zuul 边缘 服务发布在 8765 端口 我的组织服务发布在 8083 端口 当我在没有安全性的情况下访问应用程
  • 着色器使立方体的边缘倾斜?

    这个问题涉及使用着色器 可能在 Unity3D 环境中 但 Metal 或 OpenGL 都可以 以在网格最小立方体上实现圆角边缘 我希望只使用 12 个三角形的简约网格立方体 然后通过着色器 使每个块的边缘 角 稍微倾斜 其实这样可以吗带
  • Set-Cookie 标头未在 Chrome 中设置 cookie

    我正在 AJAX 调用另一个服务 API 然后该 API 应该返回一个 cookie 该 cookie 将在我的浏览器中设置 以允许我进行其余的 API 调用 然而 虽然响应标头包含 Set Cookie 标头 但实际上并未设置任何 coo
  • 是否可以同时使用带有多个预设的 Jest?

    是否可以将 Jest 与多个预设一起使用 例如 jsdom 和 react native 我想测试一个可以在 Web 和 React Native 环境中工作的 React 组件 问题是该组件可能使用 React Native 库或某些文档
  • Intellij 中的 AVD 管理器被禁用

    我正在记录这个问题和解决方案 如下 因为我第二次发现自己在这上面浪费了几个小时 解决方案 文件 gt 设置 gt 在搜索栏中输入 Android 选择 Android SDK 选择 编辑 Intellij 现在要求下载 SDK 800MB
  • Django - 媒体上传 [Errno 13] 权限被拒绝

    我在让 django 很好地处理图像上传时遇到了一些麻烦 我的脚本将根据日期创建目录 如下所示 file models FileField upload to uploads m Y 现在 如果我在上传文件夹中创建日期目录并将文件夹 chm
  • 自动布局使视图在剩余空间中居中(以编程方式)

    如何添加自动布局约束以编程方式将视图置于剩余空间的中心 参见下面的示例图片 目前 我在底部添加一个容器视图 然后将视图置于容器视图的中心 但我想知道是否有任何其他解决方案不需要使用容器视图 您需要添加一个间隔视图来执行此操作 让我们从一些观
  • 如何在 ASP.NET Core 中设置强类型配置?

    本文 http www mikesdotnetting com article 284 asp net 5 configuration and 另一篇文章 https weblog west wind com posts 2015 Jun
  • 第一次调用时 ZuulException (SendErrorFilter)

    我正在通过 Spring Cloud Spring Boot 和 Docker 构建一个应用程序 整个应用程序运行良好 我有几个微服务 每个项目都在 Docker 上运行 当我尝试通过 Zuul API 网关使用我的微服务时 我在第一次调用
  • JCS编辑磁盘辅助缓存DiskPath

    我正在开发一个带有 JCS 1 3 缓存的 Web 应用程序 我需要在运行时从 JVM 属性编辑索引磁盘辅助缓存的 DiskPath 你知道有什么方法可以做到这一点吗 我设法创建了辅助缓存对象 但我不知道如何将它与 cache ccf 中定
  • SQL 分页查询 order by

    我正在尝试编写一个查询来提取多个字段并为其分配别名 其中一个别名实际上是两个字段的总和 这实际上是我最大的问题 因为该别名是可能进行排序的 字段 之一 否则我可以删除所有别名而不会出现此问题 无论如何 我需要能够传入一个以编程方式排序的字段
  • 包含子模块的“推送部署”接收后挂钩?

    目前 我有一个post receive钩子包含 git work tree served data location git dir this bare git repo checkout f 这非常有效 直到我想包含一个子模块 它只是忽略
  • Python os.walk + 跟随符号链接

    如何让这篇文章遵循 python 2 6 中的符号链接 def load recursive self path for subdir dirs files in os walk path for file in files if file
  • 优化掉“while(1);”在 C++0x 中

    已更新 请看下文 我听说并读到 C 0x 允许编译器为以下代码片段打印 Hello include
  • 这会在全球范围内启用“use strict”吗?

    类似 但不一样 如何在全局范围内启用 ECMAScript use strict https stackoverflow com questions 4769477 how to enable ecmascript use strict g