嚴格模式和非嚴格模式的區別
//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