運行模式瀏覽器
正常(混雜)模式與嚴格模式,除了正常運行模式(混雜模式),ES5添加了第二種運行模式:"嚴格模式"(strict mode)安全
顧名思義,這種模式使得Javascript在更嚴格的語法條件下運行函數
嚴格模式的目的/做用this
1. 消除Javascript語法的一些不合理、不嚴謹之處,減小一些怪異行爲
2. 消除代碼運行的一些不安全之處,爲代碼的安全運行保駕護航
3. 爲將來新版本的Javascript作好鋪墊spa
嚴格模式的使用code
在全局或函數的第一條語句定義爲: 'use strict';
若是瀏覽器不支持, 只解析爲一條簡單的語句, 沒有任何反作用對象
語法和行爲改變
必須用var聲明變量,正常模式下一個變量能夠不使用var或者let來聲明,這樣變量會自動提高到window對象下,執行不報錯,但加了嚴格模式的時候就會報錯了blog
ussernam = 232;
console.log(ussernam)
禁止自定義的函數中的this指向windowip
function Person(age, name) { this.age = age this.name = name } // 使用的時候要使用new,這以後this纔會指向實例對象,不new直接調用的時候this指向的是window // 非嚴格模式下不會報錯,嚴格模式下就會報錯了 Person(32, 'huang')
建立eval做用域,加了嚴格模式的話eval有本身的做用域,裏面建立的對象只屬於eval裏面的做用域作用域
var str = "NBA" // eval方法能夠解析字符串裏的js代碼 // 不使用嚴格模式的話eval沒有本身的做用域 ,若是裏面的字符串是請求回來的數據,裏面有重名的變量這樣就會很不安全,會污染本身定義的全局變量 // eval裏面寫的變量至關於在全局執行 eval('var str = "CBA"; alert(str)'); alert(str) // 結果仍是CBA
對象不能有重名的屬性
// 在正常模式下,對象的屬性有重名不會報錯 // 在嚴格模式下,對象的屬性有重名會報錯 var obj = { userName: 'ff', userName: 'ff' }