JS this指向問題

2022-10-08 17:18:20 字數 1835 閱讀 2082

首先, 明確一點, 沒有巢狀時, 函式中的this指向它的呼叫者.

巢狀函式, 內部的函式的this指向它的呼叫者=>window(不是外層函式)

var a = 

fn();

}};a.f();

window

其次, 函式既可以在當前執行環境中( this指向物件 ), 又可以在全域性環境中( this指向window )

var obj = ,

bar: 1

};var foo = obj.foo;

var bar = 2;

obj.foo() // 1

foo() // 2

或者var foo = function () ;

var bar = 2;

var obj = ,

bar: 1

};obj.foo() // 1

foo() // 2

原因: j**ascript 語言之所以有this的設計,跟記憶體裡面的資料結構有關係。

var obj = ;

j**ascript 引擎會先在記憶體裡面,生成乙個物件,然後把這個物件的記憶體位址賦值給變數obj。

也就是說,變數obj是乙個位址(reference)。後面如果要讀取obj.foo,引擎先從obj拿到記憶體位址,然後再從該位址讀出原始的物件,返回它的foo屬性。

原始的物件以字典結構儲存,每乙個屬性名都對應乙個屬性描述物件。舉例來說,上面例子的foo屬性,實際上是以下面的形式儲存的。

}

當屬性的值是乙個函式。

var obj = };

這時,引擎會將函式單獨儲存在記憶體中,然後再將函式的位址賦值給foo屬性的value屬性。

}

由於函式是乙個單獨的值,所以它可以在不同的環境(上下文)執行。???

var f = function () {};

var obj = ;

// 單獨執行

f()// obj 環境執行

obj.f()

function a()

window.a();或a();//this指向window

var o =

}o.fn();//this指向o

var o =

}}o.b.fn();////this指向b

var obj = ,

bar: () =>

}obj.foo() //

obj.bar() // window

注意: 因為是箭頭函式,所以他的this是obj的this,即呼叫obj的=>window

function fn()

var a = new fn(); //this指向a

console.log(a.user); //追夢子

settimeout(function() ,500)
let $btn = document.getelementbyid('btn');

$btn.onclick = function()

var age=18

var obj=

console.log(obj.age1) //17

只有函式才形成區域性作用域,上面的obj的this實際上是全域性作用域window

JS this指向問題(2)

var color orange window.color red var person function saycolor person.saycolor saycolor person.saycolor.call saycolor undefined person.saycolor.call s...

JS this指向分析

例如 a 在 飯店 吃 餃子 執行主體就是a 上下文就是飯店 吃餃子就是行為 function 吃餃子 a.吃餃子 輸出this 指a function this是誰 和函式在哪定義的和在哪執行的沒有任何關係,就是指執行主體 複製 1 函式執行,首先看函式前面是否有 有的話前面是誰,this就是誰,...

關於js this指向的理解

var obj add1 function a var f v v this.count return f.call b,a add2 function a var f function v return f.call b,a console.log obj.add 1 2 console.log ...