關於js中this問題的大總結

2021-10-01 14:06:16 字數 1936 閱讀 4598

this:上 下文,根據執行環境而發生指向的改變,只有函式執行的時候才能確定this到底指向誰。實際上this的最終指向的是那個呼叫它的物件。

例子1:在嚴格版中的預設的this不再是window,而是undefined。我們這裡不討論嚴格版的。 

//在直接呼叫函式中獲取this

function a()

a();//undefined window

window.a();//undefined window

//函式作為物件的乙個屬性中獲取this

var b =

}b.fn();//萌萌 b

window.b.fn();//萌萌 b

//this依賴呼叫函式前的物件

var o =

}}o.b.fn();

更改一下我們常規的用法,看一下有什麼不一樣:

var o1 = 

}}o1.b.fn();//undefined

//再次強調,this指向函式執行前的物件

var o2 =

}}var j = o2.b.fn;

j();

function fn()

var a = new fn();

console.log(a.user); //萌萌

建構函式new的優先順序是最高的,this只會繫結到a上,不會被任何方式修改this的指向。順便提一下,建構函式的函式名第乙個字母大寫。

function fn1()  

; }

var a = new fn1;

console.log(a.user); //undefined

function fn2() ;}

var b = new fn2;

console.log(b.user); //undefined

function fn3()

var c = new fn3;

console.log(c.user); //萌萌

function fn4()

var d = new fn4;

console.log(d.user); //萌萌

如果返回值是乙個物件,那麼this指向的就是那個返回的物件,如果返回值不是乙個物件那麼this還是指向函式的例項。

定時器中的this,指向的是window元素繫結事件,事件觸發後執行的函式中的this,指向的當前元素箭頭函式其實是沒有this的,這個函式中的this只取決於他外面的第乙個不是箭頭函式的函式的thisthis一旦繫結了上下文,就不會被任何**改變。

var x = 20;

var a = }}

console.log(a.fn());//function()

console.log((a.fn())());//20

console.log(a.fn()());//20

console.log(a.fn()() == (a.fn())());//true

console.log(a.fn().call(this));//20

console.log(a.fn().call(a));//15

答案:

1、物件呼叫方法,返回乙個方法

2、a.fn()返回的是乙個函式,()()這是自執行表示式,匿名函式自呼叫,this指向window

3、a.fn()相當於在全域性定義了乙個函式,然後再自己呼叫執行。this -> window

4、由2和3的答案可以推出4為true

5、這段**在全域性環境中執行,this -> window

關於js中遍歷總結

1.for迴圈 1 var2 arr 3for var i 0 i arr.length i js最常用的迴圈必然是for迴圈,最基礎的用法,用於陣列遍歷,但是 書寫過多。1 var2 arr 3 array.prototype.customfunc function 4for var item i...

關於js中 的小問題

先看下面兩個 為什麼第一行正常 編譯 執行 但第二行給出錯誤?注意是 referenceerror。0 uncaught referenceerror invalid left hand side expression in postfix operation 第一想法 0 應該和 是一樣的,所以兩...

關於js中 的小問題

先看下面兩個 為什麼第一行正常 編譯 執行 但第二行給出錯誤?注意是 referenceerror。0 uncaught referenceerror invalid left hand side expression in postfix operation 第一想法 0 應該和 是一樣的,所以兩...