“使用严格”继承/范围

2023-12-21

//Global Scope
"use strict"; //1
function A() {
    "use strict"; //2
    function innerA() {
        "use strict"; //3
    }
}

我只是想知道:

是在做use strict at //1就足够了,还是我们必须在所有地方都明确,例如//2 and //3.


引用MDN上的严格模式 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode#Strict_mode_for_scripts,

要为整个脚本调用严格模式,请输入确切的语句"use strict"; (or 'use strict';) 在任何其他陈述之前。

连接严格和非严格脚本是有问题的。因此,建议您逐个功能启用严格模式。

所以把它放在顶部适用于整个文件。您不必在每个函数中明确提及这一点。

Note: Using use strict高层也有自己的问题。请在链接的 MDN 页面中了解它们。因此,根据 MDN,推荐的方法是

您还可以采取将脚本的全部内容包装在函数中并让外部函数使用严格模式的方法。这消除了串联问题,但这意味着您必须显式地将任何全局变量导出到函数范围之外。


你可以测试一下,就像这样

'use strict';

(function () {
    return {
        1: 1,
        1: 2
    };
})();

现在,它会抛出一个错误,

SyntaxError:严格模式下不允许对象文字中存在重复的数据属性

但是,当你做这样的事情时

(function () {
    return {
        1: 1,
        1: 2
    };
})();

(function () {
    'use strict';
    return {
        1: 1,
        1: 2
    };
})();

它只会在第二个函数中失败,而不会在第一个函数中失败。因为,只有第二个函数处于严格模式。

另外,如果您在函数中包含函数,就像您在问题中所示的那样,

(function () {
    'use strict';
    (function () {
        return {
            1: 1,
            1: 2
        };
    })();
})();

内部函数也将处于严格模式,因为use strict在封闭函数中。所以,内部函数会提出一个SyntaxError.


但是,如果你使用use strict在一个块内{},它不会有任何影响,例如,

(function () {
    {
        'use strict';
        return {
            1: 1,
            1: 2
        };
    }
})();

or

console.log("");

'use strict';

var a = {
    1: 1,
    1: 2
};

不会抛出任何错误。


So, use strict应该位于函数的开头或文件的开头。只有这样代码才会处于严格模式。

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

“使用严格”继承/范围 的相关文章

随机推荐

  • Raphaeljs 库和智能手机

    我使用了名为 worderfull 的 javascript 库拉斐尔伊斯 http raphaeljs com 在我的网站上绘制地图 动画和动画功能 我注意到使用这个库的脚本与iPhone但不与Android 有人可以确认这一点吗 只需进
  • 未定义的行为追溯是否意味着不能保证早期可见的副作用?

    在 C 中 如果我正确理解措辞 编译器可以假设不会发生 UB 从而影响将遇到 UB 但尚未遇到的执行路径中的行为 甚至是 I O 等可见的副作用 在抽象机遇到 UB 之前 C 是否需要 正确 执行程序直至最后可见的副作用 编译器似乎以这种方
  • 从源代码管理中排除在 Visual Studio 2013 中实际上不起作用?

    我已通过 文件 gt 源代码管理 gt 高级 gt 从源代码管理中排除 选项从 Visual Studio 2013 中的源代码管理中排除了某些文件 我看到我的目标文件旁边弹出一个小图标 上面写着 从源代码管理中排除 但是 每次对同一文件进
  • C# Visual Studio 单元测试,模拟客户端 IP 地址

    我正在编写一些单元测试 当尝试执行以下操作时 我的真实代码抛出了异常 string IPaddress HttpContext Current Request UserHostName ToString 有没有一种方法可以模拟 IP 地址
  • 在 PHP 中创建(日期,值)的数组/集合/列表

    我正在编写一个 PHP 脚本 其中输入为 From date To date 然后我想获取该日期范围并创建一个具有以下内容的某种数组 Array date x 当我将每个日期添加到数组中时 我将计算与之相关的值 对于 NET 我会 突然想到
  • iOS 应用程序提交中的导出合规性

    我制作了一个新应用程序并想提交到应用程序商店 但在最终提交时 有出口合规性检查 我应该检查什么是或否 我在我的应用程序中使用 https url 请帮我 提前致谢 当你知道你ARE符合导出要求 您可以将其放入您的 Info plist 中
  • 如何计算数字和数学运算符的数组(或字符串)

    我正在制作一个计算器 并将单击的所有数字和运算符推送 保存到数组和字符串中 我想知道哪个approach 在这种情况下是最好的 从输入生成字符串或数组OR我想不出更好的方法 我想计算数组或字符串 该字符串给出了错误的答案 我不知道如何计算数
  • UIMA 与 Spark

    正如中所述here https spark summit org 2014 leveraging uima in spark UIMA 和 Spark 在分发基础设施方面有一些重叠 我本来打算将 UIMA 与 Spark 一起使用 现在我要
  • 你能阻止 StreamReader 处理底层流吗?

    有没有办法做到这一点 this logFile File Open what r u doing log FileMode OpenOrCreate FileAccess ReadWrite using var sr new StreamR
  • 在 Pandas 中将索引转换为 MultiIndex(分层索引)

    在我正在使用的数据中 索引是复合的 即它既有项目名称又有时间戳 例如 email protected cdn cgi l email protection 2013 05 07 05 52 51 0200 我想要进行分层索引 以便将相同的电
  • java.io.IOException:android中连接上的流意外结束

    我有网络服务 URL 它工作正常 它给出了 JSON 数据 当我使用时HttpURLConnection and InputStream 我收到此错误 java io IOException unexpected end of stream
  • 使用 Selenium 在 Firefox 上单击 Javascript 链接

    我试图从汽车博客上获取一些评论 Jalopnik http jalopnik com 5912009 prius driver beat up after taking out two bikers 它最初并不随网页一起提供 而是通过一些
  • 在android中管理工具栏的导航和后退按钮从片段到片段

    我所有的片段都是通过控制的ActionBarActivity 主要活动 里面主要活动 a DrawerLayout已实现 所有子片段均通过抽屉布局的列表项单击推送 我面临的问题是通过抽屉布局推送片段后我想将抽屉图标更改为后退图标ToolBa
  • 如何对包含 EntityFunctions.AddDays 函数的 GetNewValues() 进行单元测试

    下面的示例代码在生产中运行良好 但不能是单元 因为 EntityFunctions 进行了测试 我的单元测试项目正在使用 InMemoryDatabase 而不是真正的 SQL 数据库 我可以轻松解决我的问题 通过在 SQL 数据库中使用计
  • 为什么 Clang 决定允许在 C++ 中指定初始值设定项?

    我认为指定的初始值设定项在 C 中已不再使用 只能在 C 中使用 但是 我遇到了一个简单的示例 它可以在 clang 中编译并正常工作 int main int a 6 4 29 2 15 g https rextester com AXI
  • 无法阻止表单以空输入提交

    当任何输入为空时 我无法阻止表单提交 它没有出错 但也没有停止提交 我在表单提交输入中调用了该函数 它位于 onClick 调用下 JS File function stopSubmit var inDay document getElem
  • Firefox Mobile:使用translate3d进行动画处理的元素从父容器中流出

    我有一个使用translate3d 变换制作动画的元素 父元素有overflow hidden 但在 Firefox Mobile 19 0 2 上 动画期间动画元素在父元素之外可见 动画化top财产而不是translate3d正在工作 但
  • 如何使用MYSQL将秒转换为时间

    你能帮我在sql查询中将秒转换为时间吗 我正在使用 MySql 函数 SEC TO TIME TIME FORMAT SEC TO TIME COALESCE ROUND NBSECONDS 0 H i s AS MYTIME 我必须找到此
  • 为什么 Chrome 在响应模式下缩小视图?

    我有一个应该具有响应能力的页面 它还有一个适用于移动设备的视口标签 如下所示 然而 在 Chrome 开发工具中 当页面首先以横向模式查看然后旋转到纵向模式时 即使 html 页面的宽度是旋转后设备的宽度 即 400px 页面尺寸也会变得非
  • “使用严格”继承/范围

    Global Scope use strict 1 function A use strict 2 function innerA use strict 3 我只是想知道 是在做use strict at 1就足够了 还是我们必须在所有地方