JavaScript 除了提供正常模式外,還提供了嚴格模式(strict mode)。ES5 的嚴格模式是採用具備限制性 JavaScript變體的一種方式,即在嚴格的條件下運行 JS 代碼。瀏覽器
嚴格模式在 IE10 以上版本的瀏覽器中才會被支持,舊版本瀏覽器中會被忽略。安全
嚴格模式對正常的 JavaScript 語義作了一些更改: 函數
1.消除了 Javascript 語法的一些不合理、不嚴謹之處,減小了一些怪異行爲。this
2.消除代碼運行的一些不安全之處,保證代碼運行的安全。spa
3.提升編譯器效率,增長運行速度。ip
4.禁用了在 ECMAScript 的將來版本中可能會定義的一些語法,爲將來新版本的 Javascript 作好鋪墊。好比一些保留字如:class,enum,export, extends, import, super 不能作變量名作用域
嚴格模式能夠應用到整個腳本或個別函數中。所以在使用時,咱們能夠將嚴格模式分爲爲腳本開啓嚴格模式和爲函數開啓嚴格模式兩種狀況。get
狀況一 :爲腳本開啓嚴格模式編譯器
有的 script 腳本是嚴格模式,有的 script 腳本是正常模式,這樣不利於文件合併,因此能夠將整個腳本文件放在一個當即執行的匿名函數之中。這樣獨立建立一個做用域而不影響其餘 script 腳本文件。string
(function (){
//在當前的這個自調用函數中有開啓嚴格模式,當前函數以外仍是普通模式
"use strict";
var num = 10;
function fn() {}
})();
//或者
<script>
"use strict"; //當前script標籤開啓了嚴格模式
</script>
<script>
//當前script標籤未開啓嚴格模式
</script>
狀況二: 爲函數開啓嚴格模式
要給某個函數開啓嚴格模式,須要把「use strict」; (或 'use strict'; ) 聲明放在函數體全部語句以前。
function fn(){
"use strict";
return "123";
}
//當前fn函數開啓了嚴格模式
嚴格模式對 Javascript 的語法和行爲,都作了一些改變。
'use strict'
num = 10
console.log(num)//嚴格模式後使用未聲明的變量
--------------------------------------------------------------------------------
var num2 = 1;
delete num2;//嚴格模式不容許刪除變量
--------------------------------------------------------------------------------
function fn() {
console.log(this); // 嚴格模式下全局做用域中函數中的 this 是 undefined
}
fn();
---------------------------------------------------------------------------------
function Star() {
this.sex = '男';
}
// Star();嚴格模式下,若是 構造函數不加new調用, this 指向的是undefined 若是給他賦值則 會報錯.
var ldh = new Star();
console.log(ldh.sex);
----------------------------------------------------------------------------------
setTimeout(function() {
console.log(this); //嚴格模式下,定時器 this 仍是指向 window
}, 2000);