最近,我通过Crockford的jslint 输入了一些我的笔记本代码, 它犯了以下错误:
第1行字符1:缺少“严格使用”的语句。
某些搜索, 我意识到有些人在他们的 javascript 代码中添加了“ 严格使用 ” ; 。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并没有揭示此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读该语句有关, 但我不知道效果会是什么 。
那么,什么是“严格使用”;什么是“严格使用”;一切,它意味着什么,它是否仍然相关?
当前的任何浏览器是否响应“ 严格使用 ” ; 字符串, 或是否未来使用 ?
由于浏览器的战争和不良的管理,手稿的设计和实施过于仓促。 结果导致许多设计决定不善,不直观的语法和混淆不清的语义进入了语言。 严格的方式旨在修正其中的一些错误。
“使用严格”指令在向程序员传达代码的同时, 也设定了对代码的替代解释。
例如,此关键字指方法定义中的对象,如此,或指其他语言的自定义。
let o = {
name: 'John Doe',
sayName: function(){
console.log(this.name);
}
};
o.sayName(); // 'John Doe'
这在方法上下文之外没有任何目的,但所有javascript函数都有这个关键词,无论它们是否为方法:
function run() {
console.log(this);
}
run(); // Window
在这里,这是对一个全球目标的确定,它没有意义,也没有意义,因为全球目标已经在范围中存在。
在一个全球功能中,严格地以这种方式,决心作出不确定的决定,这正是我们所期望的。
"use strict"
function run() {
console.log(this);
}
run(); // undefined
有些错误即使严格的方式也无法固定, 因为语法应该对旧浏览器有效, 因为它们忽略了“ 限制模式” 指令。 这是故意的 。
要比较的小示例 :
无限制模式 :
(一) [1,2,3] 控制台.log(一) / 输出: / 1/ / 2/ 3
严格模式 :
“ 严格使用 ” ; 对于 (i) [1, 2, 3]) 控制台. log(i) / 输出: // / 未捕获引用器: i 未定义
无限制模式 :
字符串. prototype. test = 函数 () { 控制台. log( 此“ 字符串” 类型); } } ; a. test (); // 输出 // 假
字符串类型. prototype. test = 函数 () {“ 严格使用 ” {; 控制台. log( 此“ 字符串” 的类型) } ; a. test (); // 输出 / / true
“ 严格使用 ” ; 是程序员不会使用松散或刺绣的坏性能的保险。 它是一种指南, 就像标尺会帮助您做直线。 “ 严格使用” 有助于您做“ 直线编码 ” 。
那些不愿使用统治者直线行事的人 通常最终会出现在那些网页上 要求其他人调试他们的代码
杜格·克罗克福德(Doug Crockford)曾是一位高级刺绣开发商, 多年来一直担任高级刺绣开发商, 他在这里有一个非常有趣的职位。
现代刺绣作业应总是引出“严格使用”的“严格使用”; 柔和。 ecma组之所以选择“严格”模式的唯一原因是允许经验较少的编码员使用刺绣,然后给予时间适应新的、更安全的编码作业。
如果人们担心使用严格使用,
浏览器中的 5 个“ 限制模式” 支持 。 这是什么意思 ? novogeek. com - krishna 的 Webb 。
讨论浏览器支持, 但更重要的是如何安全处理:
function isStrictMode(){
return !this;
}
/*
returns false, since 'this' refers to global object and
'!this' becomes false
*/
function isStrictMode(){
"use strict";
return !this;
}
/*
returns true, since in strict mode the keyword 'this'
does not refer to global object, unlike traditional JS.
So here, 'this' is 'undefined' and '!this' becomes true.
*/
严格模式使 v8 引擎具有严格的特性。 某些特性的简短示例 :
您可通过写作方式实现全球化 :
'use strict'; // strict mode enabled!
函数中包含 :
let myfunc = () => {
'use strict'; // strict mode enabled
b = 0; // broke
}
在使用变量之前必须声明变量(正常 imo):
var x;
x = '0'; // ok
y = ''; // not ok
已经启用 es6 功能( 取决于浏览器) , 因为节点 v4+ 很重要 。 在某些情况中, 性能更好 。
还有更多功能,请在这里检查更多功能