嚴格模式和非嚴格模式的區別
//f1.js
'use strice'; //整個js文件都是嚴格模式下執行的
var n = 1;
var foo = function(){...};
//...
var n = 1;
var foo = function(){
'use strict';
//在foo函數內是嚴格模式
//some code...
}
- 嚴格模式下, delete運算符后跟隨非法標識符(即delete 不存在的標識符),會拋出語法錯誤; 非嚴格模式下,會靜默失敗並返回false
- 嚴格模式中,對象直接量中定義同名屬性會拋出語法錯誤; 非嚴格模式不會報錯
- 嚴格模式中,函數形參存在同名的,拋出錯誤; 非嚴格模式不會
- 嚴格模式不允許八進制整數直接量(如:023)
- 嚴格模式中,arguments對象是傳入函數內實參列表的靜態副本;非嚴格模式下,arguments對象里的元素和對應的實參是指向同一個值的引用
- 嚴格模式中 eval和arguments當做關鍵字,它們不能被賦值和用作變量聲明
- 嚴格模式會限制對調用棧的檢測能力,訪問arguments.callee.caller會拋出異常
- **嚴格模式 變量必須先聲明,直接給變量賦值,不會隱式創建全局變量,不能用with, **
- 嚴格模式中 call apply傳入null undefined保持原樣不被轉換為window