7017
|
Mark Rogers · 技术社区 · 15 年前 |
![]() |
1
5214
这篇关于Javascript严格模式的文章可能会引起您的兴趣: John Resig - ECMAScript 5 Strict Mode, JSON, and More
以及:
另外请注意,您可以对整个文件应用“严格模式”。。。或者,您只能将其用于特定功能 (仍引用约翰·雷斯格的文章)
所以,我想这有点像
supported by all major browsers .
在…内
native ECMAScript modules
(有
|
![]() |
2
1333
这是ECMAScript 5的一个新特性。约翰·雷西格写了一篇文章 a nice summary 当然。
现在将它放入代码中不会对当前浏览器造成任何问题,因为它只是一个字符串。如果您的代码违反pragma,将来可能会导致代码出现问题。例如,如果您当前有
|
![]() |
3
745
功能列表(非详尽)
Strict mode , Mozilla开发者网络 ] |
![]() |
4
446
如果人们担心使用
ECMAScript 5 'Strict mode' support in browsers. What does this mean?
它谈到了浏览器支持,但更重要的是如何安全地处理它:
|
![]() |
5
235
一句警告的话,你们所有努力收费的程序员:申请
如果你打算冒险,申请是个好主意
当我采用时,我的项目不是一个绿地项目
|
![]() |
6
214
使用
|
![]() |
7
150
我强烈建议每个开发人员现在就开始使用严格模式。有足够多的浏览器支持它,严格模式将合法地帮助我们避免我们甚至不知道代码中存在的错误。
显然,在最初阶段会出现我们从未遇到过的错误。为了获得充分的好处,我们需要在切换到严格模式后进行适当的测试,以确保捕获了所有内容。当然,我们不只是扔
例如
JSLint 是Douglas Crockford编写的调试器。只需粘贴到脚本中,它就会快速扫描代码中任何明显的问题和错误。 |
![]() |
8
104
我想提供一个更有根据的答案来补充其他答案。我希望编辑最流行的答案,但失败了。我试图使它尽可能全面和完整。 你可以参考 MDN documentation
指令与语句相似,但不同。
这个
|
![]() |
9
89
我的两分钱:
strict模式的目标之一是允许更快地调试问题。它帮助开发人员在某些错误的事情发生时抛出异常,从而导致沉默&你网页的奇怪行为。我们使用的那一刻
使用后我学到的一些重要的东西
防止全局变量声明:
消除
防止重复: 当我们有重复的属性时,它抛出一个异常
|
![]() |
10
67
如果您使用的是去年左右发布的浏览器,那么它很可能支持JavaScript严格模式。只有ECMAScript 5成为当前标准之前的旧浏览器不支持它。 命令周围的引号确保代码在较旧的浏览器中也能工作(尽管在严格模式下生成语法错误的东西通常只会导致脚本在较旧的浏览器中以某种难以检测的方式出现故障)。 |
![]() |
11
62
添加时
资料来源:
|
![]() |
12
57
Strict模式对普通JavaScript语义进行了一些更改:
欲了解更多信息,请访问vistit Strict Mode- Javascript |
![]() |
13
56
“严格使用”;是一种保证,程序员不会使用JavaScript的松散或不良属性。它是一个向导,就像一把尺子可以帮你画直线一样。“使用严格”将帮助您进行“直接编码”。 那些不喜欢使用标尺直接执行代码的人通常会在页面中要求其他人调试他们的代码。 相信我。与设计糟糕的代码相比,开销可以忽略不计。 Doug Crockford, who has been a senior JavaScript developer for several years, has a very interesting post here 其目的是允许经验较少的程序员访问JavaScript,然后给他们时间来适应新的更安全的编码实践。 |
![]() |
14
50
包括…在内
|
![]() |
15
45
|
![]() |
16
39
同样在严格模式下,运行速度更快,一些警告或无声警告会抛出致命错误,最好总是使用它来生成更整洁的代码。
1) 函数中的严格模式
2) 全脚本严格模式
3) 分配给不可写全局
你可以 read more on MDN . |
![]() |
17
31
ECMAScript委员会的一些成员进行了一次很好的讨论:
Changes to JavaScript, Part 1: ECMAScript 5"
|
![]() |
18
26
要比较的小示例: 非严格模式:
严格模式:
|
![]() |
19
19
注意
|
![]() |
20
14
简言之,这将使您的代码不那么容易出错,从而使您编写出优秀的代码。 |
![]() |
21
13
ECMAScript 5中引入了JavaScript严格模式。
写
浏览器兼容性问题: “use”指令意味着向后兼容。不支持它们的浏览器只会看到一个未被进一步引用的字符串文本。因此,他们将越过它继续前进。 |
![]() |
22
13
|
![]() |
23
12
“严格使用”;ECMA努力使JavaScript更加健壮。它引入了JS,试图使它至少有一点“严格”(自90年代以来,其他语言都实现了严格的规则)。它实际上“强迫”JavaScript开发人员遵循某种编码最佳实践。 尽管如此,JavaScript仍然非常脆弱。没有类型化变量、类型化方法等。 我强烈建议JavaScript开发人员学习更健壮的语言,如Java或ActionScript3,并在JavaScript代码中实现相同的最佳实践,这样会更好地工作,更易于调试。 |
![]() |
24
12
通常,JavaScript不遵循严格的规则,因此增加了出错的机会。使用后
如果
|
![]() |
26
7
“严格使用”;定义应在中执行的JavaScript代码 “严格模式”。
Internet Explorer 9及更低版本 . 缺点 如果开发人员使用的库处于严格模式,但开发人员习惯于在正常模式下工作,那么他们可能会对库调用一些无法按预期工作的操作。 更糟糕的是,由于开发人员处于正常模式,他们没有抛出额外错误的优势,因此错误可能会无声地失败。
人们通常认为首先不应该使用这些东西,但是一些开发人员不喜欢这种限制,希望使用该语言的所有特性。 |
![]() |
27
4
严格模式可以防止内存泄漏。 请检查以下以非严格模式编写的函数:
在这个函数中,我们使用一个名为
另一种情况是,比方说,变量在子函数中声明。在这种情况下,编译器将检查外部范围(即父函数)中该变量的有效性。只有这样,它才会在全局空间中进行检查,并在那里为我们创建一个变量。 这意味着需要进行额外的检查。这将影响应用程序的性能。 现在让我们在严格模式下编写相同的函数。
我们将得到以下错误。
这里,编译器抛出引用错误。在严格模式下,编译器不允许我们在不声明变量的情况下使用它。因此,可以防止内存泄漏。此外,我们还可以编写更优化的代码。 |
![]() |
28
3
对 严格模式 . 这是通过在JS文件中添加下面的代码行来完成的。
在你的代码中。 指示代码应该在严格模式下解释,这会向浏览器等用户代理指定他们应该将代码视为书面代码,如果代码没有意义,则抛出错误。
例如:
考虑一下
如果未启用严格模式,用户代理通常会对有问题的代码进行一系列修改,以使其有意义。从表面上看,这似乎是一件好事,事实上,在严格模式之外工作使人们可以在不完全确定所有细节的情况下,用JavaScript代码湿脚。然而,作为一名开发人员,我不想在我的代码中留下一个bug,因为我知道它以后可能会回来咬我,我也只想写好代码。这就是严格模式的作用所在。 场景3:[严格模式]
附加提示:
文件名:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode |
![]() |
29
0
由于浏览器战争和糟糕的管理,JavaScript的设计和实现都很匆忙。结果,许多糟糕的设计决策、不直观的语法和令人困惑的语义进入了语言。严格模式旨在修正其中一些错误。
但在不创建替代解释的情况下修复这些错误会破坏向后兼容性。所以
例如
在这里
以严格的方式
有些错误即使在严格模式下也无法修复,因为语法应该对较旧的浏览器有效,因为它们忽略了
|
![]() |
Omar · 应为标识符,但看到的是“*”行7位置3 8 年前 |
![]() |
shankar.siva · jslint应为“]”,而看到的是“/” 9 年前 |
![]() |
theDmi · 为什么TSLint和JSLint报告空块? 10 年前 |
![]() |
TimG · 在多个for循环中使用相同的变量名是不是一种糟糕的做法? 12 年前 |