JavaScript 严格模式
- 上一页 JS Hoisting
- 下一页 JS this 关键词
"use strict";
定义 JavaScript 代码应该以“严格模式”执行。
"use strict" 指令
"use strict"
是 JavaScript 1.8.5 中的新指令(ECMAScript version 5)。
它不算一条语句,而是一段文字表达式,更早版本的 JavaScript 会忽略它。
"use strict";
的作用是指示 JavaScript 代码应该以“严格模式”执行。
在严格模式中,您无法,例如,使用未声明的变量。
以下版本的浏览器支持严格模式:
- 版本 10 以后的 IE
- 版本 4 以后的 Firefox
- 版本 13 以后的 Chrome
- 版本 5.1 以后的 Safari
- 版本 12 以后的 Opera
声明严格模式
通过在脚本或函数的开头添加 "use strict";
来声明严格模式。
在脚本开头进行声明,拥有全局作用域(脚本中的所有代码均以严格模式来执行):
实例
"use strict"; x = 3.14; // 这会引发错误,因为 x 尚未声明
实例
"use strict"; myFunction(); function myFunction() { y = 3.14; // 这会引发错误,因为 y 尚未声明 }
在函数中声明严格模式,拥有局部作用域(只有函数中的代码以严格模式执行):
x = 3.14; // 这不会引发错误 myFunction(); function myFunction() { "use strict"; y = 3.14; // 这会引发错误 }
"use strict"; 语法
声明严格模式的语法被设计为兼容更早版本的 JavaScript。
Kuwa mtaani ya JavaScript kwa matukio ya namba (kama 4+5) au matukio ya kifupi ("Bill Gates") hayafikia mafikirio ya kina. Iliyotumika tu kwa sababu ya kusadika kwa kufikiria kina kwa sababu ya kufikiria kina.
所有 "use strict";
只会对“理解”其含义的新编译器产生影响。
Kwa nini tunatumiya moduli ya kina?
Moduli ya kina inanaweza kumfunza uadilifu wa JavaScript ambao haukubaliwa kwa kusababisha kosa.
Moduli ya kina inasababisha kosa kwa kubadilika uadilifu wa "mashabiki ya kina" ambayo walikuwa wakubaliwa kwa kusababisha kosa kwa uadilifu wa kina.
Kwa mfano, kwenye JavaScript wa kina, kusababisha kosa kwa kugawaza jina la muhimu kina kuzalishwa muhimu mpya kwa jina la kina. Kwenye moduli ya kina, hii itakataa kusababisha kosa, kwa sababu hii haikubaliwa kusundukiza muhimu jingine kwa jina la kina.
Kwenye JavaScript wa kina, kama mtafiti anasababisha kosa kwa kugawaza jina la muhimu, hii itakataa kusababisha kusundukiza muhimu jingine kwa jina la kina. Kwenye moduli ya kina, hii itakataa kusababisha kosa, kwa sababu hii haikubaliwa kusundukiza muhimu jingine kwa jina la kina.
Kwenye moduli ya kina, kusababisha kosa kwa kugawaza uadilifu wa kuzalishwa wa kiwango kinachokutumiwa kama kiwango kinachokutumiwa kama muhimu, au kwa kumpongeza kiwango kimechaguliwa, itakataa kusababisha kosa. Kwa JavaScript wa kina, kama mtafiti anasababisha kosa kwa kugawaza jina la muhimu, hii itakataa kusababisha kusundukiza muhimu jingine kwa jina la kina. Kwenye moduli ya kina, hii itakataa kusababisha kosa, kwa sababu hii haikubaliwa kusundukiza muhimu jingine kwa jina la kina.
Matukio yanayohatarisha katika moduli ya kina
Kutumiwa kwa muhimu kwa kusababisha kosa kwa kumpongeza muhimu kimechaguliwa:
"use strict"; x = 3.14; // Hii itakataa kusababisha kosa
Kiwango kina jina la muhimu
Kutumiwa kwa kiwango kipya kwa kusababisha kosa kwa kumpongeza kiwango kimechaguliwa:
"use strict"; x = {p1:10, p2:20}; // Hii itakataa kusababisha kosa
Kufungua muhimu (au kiwango) haukubaliwa:
"use strict"; var x = 3.14; delete x; // Hii itakataa kusababisha kosa
Kufungua programu haukubaliwa:
"use strict"; function x(p1, p2) {}; delete x; // Hii itakataa kusababisha kosa
Jina la kufikia pamba tupu haukubaliwa:
"use strict"; function x(p1, p1) {}; // Hii itakataa kusababisha kosa
Maneno ya uadilifu wa sifuri haukubaliwa:
"use strict"; var x = 010; // Hii itakataa kusababisha kosa
Haribifu wa kuzitafuta haukubaliwa:
"use strict"; var x = \010; // Hii itakataa kusababisha kosa
Kufungua uadilifu wa kupata tu haukubaliwa:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // Hii itakataa kusababisha kosa
Kufungua uadilifu wa kupata tu haukubaliwa:
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // Hii itakataa kusababisha kosa
Kufungua uadilifu wa kuzalishwa haikubaliwa:
"use strict"; delete Object.prototype; // Hii itakataa kusababisha kosa
Mashirika wa "eval" haikubali kutumiwa kama muhimu:
"use strict"; var eval = 3.14; // Hii itakataa kusababisha kosa
Mashirika wa "arguments" haikubali kutumiwa kama muhimu:
"use strict"; var arguments = 3.14; // 这将引发错误
with
语句是不允许的:
"use strict"; with (Math){x = cos(2)}; // 这将引发错误
处于安全考虑,不允许 eval()
在其被调用的作用域中创建变量:
"use strict"; eval ("var x = 2"); alert (x); // 这将引发错误
在类似 f() 的函数调用中,this 的值是全局对象。在严格模式中,现在它成为了 undefined
。
对未来的保障
严格模式中不允许使用为未来预留的关键词。它们是:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict"; var public = 1500; // 这将引发错误
警告
"use strict"
指令只能在脚本或函数的开头被识别。
- 上一页 JS Hoisting
- 下一页 JS this 关键词