ES5-ES6-ES7_嚴格模式

運行模式瀏覽器

正常(混雜)模式與嚴格模式,除了正常運行模式(混雜模式),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'
  }
相關文章
相關標籤/搜索