最近,我通过Crockford的JSLint运行了一些JavaScript代码,它给出了以下错误:
第1行第1个字符处的问题:缺少“使用严格”语句。
通过搜索,我意识到有些人将"use strict";
其代码添加到了JavaScript中。添加语句后,错误停止出现。不幸的是,谷歌没有透露此字符串语句背后的许多历史。当然,它一定与浏览器如何解释JavaScript有关,但是我不知道会有什么影响。
那么到底是"use strict";
什么,它意味着什么,并且仍然有意义?
当前的浏览器是否响应该"use strict";
字符串,或者该字符串可供将来使用?
严格模式可以防止内存泄漏。
请检查以下以非严格模式编写的功能:
在此函数中,我们使用
name
在函数内部称为的变量。在内部,编译器将首先检查在该特定函数范围内是否有使用该特定名称声明的变量。由于编译器知道没有这样的变量,因此它将检查外部范围。就我们而言,这是全球范围。再次,编译器理解在全局空间中也没有使用该名称声明的变量,因此它在全局空间中为我们创建了这样的变量。从概念上讲,此变量将在全局范围内创建,并将在整个应用程序中可用。另一种情况是,例如,该变量在子函数中声明。在这种情况下,编译器会在外部范围(即父函数)中检查该变量的有效性。只有这样,它将检查全局空间并在那里为我们创建一个变量。这意味着需要进行其他检查。这将影响应用程序的性能。
现在,让我们在严格模式下编写相同的函数。
我们将收到以下错误。
在此,编译器将引发参考错误。在严格模式下,编译器不允许我们在未声明的情况下使用变量。因此可以防止内存泄漏。另外,我们可以编写更多优化的代码。