js嚴格模式下的this指向,es6模組預設使用嚴格模式
一、問題描述
有這麼一段程式碼,他的執行結果是什麼呢?
class A {
print() {
console.log("==>", this);
}
}
var aa = new A();
var print = aa.print;
aa.print();
print();
二、解題思路
我們一眼略過,迅速說出了答案
//A{}
//window{}
很遺憾,不對。答案是
//A{}
//undefined
這是為毛啊?肯定瀏覽器有毛病,那麼我們把這段程式碼用babel轉一下,轉成es5的形式,看看有什麼貓膩。
var A = /*#__PURE__*/function () {
"use strict";
function A() {}
var _proto = A.prototype;
_proto.print = function print() {
console.log("==>", this);
};
return A;
}();
var aa = new A();
var print = aa.print;
aa.print();
print();
上面自動加了嚴格模式,後來查閱資料知道
ES6 的模組自動採用嚴格模式,不管你有沒有在模組頭部加上"use strict";。
類或者一個js檔案就是一個模組,所以會自動使用嚴格模式。
嚴格模式主要有以下限制。
- 變數必須宣告後再使用;
- 函式的引數不能有同名屬性,否則報錯;
- 不能使用with語句;
- 不能對只讀屬性賦值,否則報錯;
- 不能使用字首0表示八進位制數,否則報錯;
- 不能刪除不可刪除的屬性,否則報錯;
- 不能刪除變數delete prop,會報錯,只能刪除屬性delete global[prop];
- eval不會在它的外層作用域引入變數;
- eval和arguments不能被重新賦值;
- arguments不會自動反映函式引數的變化;
- 不能使用arguments.callee;
- 不能使用arguments.caller;
禁止this指向全域性物件
;- 不能使用fn.caller和fn.arguments獲取函式呼叫的堆疊;
- 增加了保留字(比如protected、static和interface)。
好,其他的我們日後再看,我們提取關鍵資訊 - 禁止this指向全域性物件
;
這是什麼意思呢?也就是當我們沒有指定函式的呼叫者時,函式不會預設指向全域性物件window
下面舉個例子
"use strict";
function f() {
console.log(this);
}
f()//log: undefined
window.f()//log: window{}
三、總結
這題答錯的主要原因是因為,我不知道es6會預設使用嚴格模式。以及嚴格模式的一些特點,瞭解之後發現也沒有這麼燒腦,還是知識儲量太少,要多加練習哦。。
相關文章
- 嚴格模式下this的指向模式
- 嚴格模式下this的指向問題模式
- JS '嚴格模式'JS模式
- 嚴格模式下對於this指向的影響模式
- 嚴格模式和非嚴格模式區別模式
- 嚴格模式模式
- JavaScript嚴格模式JavaScript模式
- JavaScript 嚴格模式JavaScript模式
- JS專題之嚴格模式JS模式
- 嚴格模式use strict模式
- JavaScript 中的 嚴格模式JavaScript模式
- JSON.parse () 的非嚴格模式JSON模式
- JS 基礎篇(五):JS嚴格模式JS模式
- javascript嚴格模式下eval()的變化JavaScript模式
- ECMAScript嚴格模式簡介模式
- Javascript 嚴格模式詳解JavaScript模式
- 嚴格模式下變數宣告注意點模式變數
- javascript嚴格模式下的8點規則JavaScript模式
- 嚴格模式下對變數宣告的影響模式變數
- javascript如何設定嚴格模式的作用範圍JavaScript模式
- JavaScript嚴格模式(三)- 物件的禁止操作JavaScript模式物件
- web基礎(四)嚴格模式與混雜模式Web模式
- 嚴格模式對parseInt()函式的影響模式函式
- 使用React嚴格模式避免過時的程式碼和副作用React模式
- 你不知道的JavaScript--Item1 嚴格模式JavaScript模式
- MySQL SELECT list is not in...MySQL關閉嚴格模式MySql模式
- 養成一個好習慣:在嚴格模式下開發Javascript模式JavaScript
- 好程式設計師web前端教程之詳解JavaScript嚴格模式程式設計師Web前端JavaScript模式
- JavaScript各類參考手冊+除錯+嚴格模式+使用誤區JavaScript除錯模式
- 聊一聊JavaScript中的嚴格模式與相關的‘坑’JavaScript模式
- 面試— !Doctype的作用,嚴格模式和混雜模式的區別、以及如何觸發兩種模式面試模式
- reperror()的格式有嚴格要求Error
- Doctype的作用?嚴格模式與混合模式,如何觸發者這兩種模式,區分它們有何意義?模式
- 如何配置使用 HTTP 嚴格傳輸安全(HSTS)HTTP
- 補充上一篇,嚴格模式下不同場景下函式引數名的區別模式函式
- 1 函式極限的嚴格定義函式
- MySQL5.7.11 -- 嚴格的密碼要求MySql密碼
- JS設計模式三:模組模式JS設計模式