js嚴格模式下的this指向

2021-08-19 16:41:04 字數 3992 閱讀 5443

一、全域性作用域中的this

es5,6,不管是嚴格模式函式不是嚴格模式this都指向window

//    'use strict';

console.log(this);

//window 

二、全域性作用域中函式中的thises5,非嚴格模式this指向window,嚴格模式this指向undefined;es6箭頭函式的this都指向window

//es5,

非嚴格模式

// function demo()

// demo(); //window 

//es5,

嚴格模式

// function demo()

// demo(); //undefined

//es6,

非嚴格模式

// let demo = () =>

// demo(); //window 

//es6,

嚴格模式

// let demo = () =>

// demo(); //window 

三、 物件的函式(方法)中的thises5,不管是嚴格模式還是非嚴格模式,this的指向都是呼叫這個函式的物件;es6的this則是執行該物件所處的執行上下文(執行環境)

//

在window

執行上下文中

//es5

,非嚴格

// var obj =

// }

// obj.fun(); //

//es5

,嚴格// var obj =

// }

// obj.fun(); //

//es6

,非嚴格

// var obj =

// }

// obj.fun(); // window 

//es6

,嚴格// var obj =

// }

// obj.fun(); // window 

//在乙個函式內

//es5,

非嚴格// function constructor()

// }

// obj.fun(); //

//// }

//// constructor();

//es5,

非嚴格// function constructor()

// }

// obj.fun(); //

//// }

//// constructor();

//es6

,非嚴格

// function constructor()

// }

// }

// obj.fun();

// }

// constructor();

//es6

,嚴格// function constructor()

// }

// }

// obj.fun();

// }

// constructor();

四、建構函式的this

在嚴格模式下,建構函式中的this指向建構函式建立的物件例項。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

"use strict";

console.log("嚴格模式");

console.log("建構函式中的this");

functionconstru()

}

varo2 =newconstru();

o2.b ='o2.b';

console.log(o2.f2());

五、事件處理函式中的this

在嚴格模式下,在事件處理函式中,this指向觸發事件的目標物件。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

"use strict";

functionblue_it(e)

}

varelements = document.getelementsbytagname('*');

for(vari=0 ; ielements[i].onclick = blue_it;

}

//這段**的作用是使被單擊的元素背景色變為藍色

六、內聯事件處理函式中的this

在嚴格模式下,在內聯事件處理函式中,有以下兩種情況:

?

1

2

3

4

5

6

7

8

9

<buttononclick="alert((function())());">

內聯事件處理1

<buttononclick="'use strict'; alert(this.tagname.tolowercase());">

內聯事件處理2

js 嚴格模式

基於es3.0和es5.0新增的方法使用的,es3.0和es5.0產生矛盾的地方在嚴格模式下就是採用的es5.0,否則js解析採用es3.0 注意 use strict 要放在邏輯的最頂端 的最頂端,有作用範圍,在函式最頂端就是當前函式採取嚴格模式 嚴格模式 1.不允許用with with可以改變作...

js 嚴格模式

簡單整理一下js嚴格模式下的變化。整理 mdn 部分 測試環境 chrome 76.0.3809.132 use strict mistypedvaraible 17 這一行 就會丟擲 referenceerror。不可以不寫宣告 主流瀏覽器現在實現了嚴格模式。但是不要盲目的依賴它,因為市場上仍然有...

js嚴格模式

es6 的模組自動採用嚴格模式,不管你有沒有在模組頭部加上 use strict 嚴格模式主要有以下限制。變數必須宣告後再使用 函式的引數不能有同名屬性,否則報錯 不能使用with語句 不能對唯讀屬性賦值,否則報錯 不能使用字首0表示八進位制數,否則報錯 不能刪除不可刪除的屬性,否則報錯 不能刪除變...