在JavaScript中,this關(guān)鍵字的指向取決于它是如何被調(diào)用的。函數(shù)中的 this 在調(diào)用時(shí)是綁定的,完全取決于函數(shù)的調(diào)用位置,即函數(shù)的調(diào)用方式。要知道 this 指向什么,你必須知道相關(guān)函數(shù)是如何被調(diào)用的。本文詳細(xì)為大家介紹關(guān)于js中this指向有幾種情況,跟著小編一起詳細(xì)了解下。
一、js中this指向有幾種情況?
this 的指向取決于函數(shù)調(diào)用方式,常見(jiàn)有以下 5 種情況:
默認(rèn)綁定
非嚴(yán)格模式下指向全局對(duì)象,嚴(yán)格模式下為 undefined。
javascriptfunction foo() { console.log(this); }foo(); // 瀏覽器: window / 嚴(yán)格模式: undefined
隱式綁定(對(duì)象方法調(diào)用)
指向調(diào)用方法的對(duì)象。
javascriptconst obj = { name: "Alice", sayHi: function() { console.log(this.name); } };obj.sayHi(); // 輸出 "Alice"(this 指向 obj)
顯式綁定
強(qiáng)制綁定 this 到指定對(duì)象。
javascriptfunction greet() { console.log(this.message); }greet.call({ message: "Hello" }); // 輸出 "Hello"
new 綁定
指向新創(chuàng)建的實(shí)例對(duì)象。
javascriptfunction Person(name) { this.name = name; }const alice = new Person("Alice");console.log(alice.name); // 輸出 "Alice"
箭頭函數(shù)
繼承外層作用域的 this,無(wú)自己的 this。
javascriptconst obj = { name: "Bob", sayHi: () => console.log(this.name) };obj.sayHi(); // 輸出 undefined(外層可能是 window)

二、JavaScript 數(shù)組去重常用方法
1. 使用 Set(ES6+ 最簡(jiǎn)潔)
javascriptconst arr = [1, 2, 2, 3];const unique = [...new Set(arr)]; // [1, 2, 3]
2. 使用 filter + indexOf
javascriptconst unique = arr.filter((item, index) => arr.indexOf(item) === index);
3. 使用 reduce
javascriptconst unique = arr.reduce((acc, item) => acc.includes(item) ? acc : [...acc, item], []);
4. 對(duì)象鍵值去重
javascriptconst unique = Object.keys(arr.reduce((acc, item) => {acc[item] = true;return acc;}, {})); // 注意:結(jié)果為字符串?dāng)?shù)組
5. 排序后比較相鄰元素
javascriptconst sorted = [...arr].sort();const unique = sorted.filter((item, i) => item !== sorted[i + 1]);
性能建議:
大數(shù)據(jù)量?jī)?yōu)先用 Set。
兼容性要求高用 filter + indexOf。
對(duì)象/復(fù)雜類型需自定義去重邏輯。
在JavaScript中,`this`的指向取決于函數(shù)的調(diào)用方式。普通函數(shù)作為回調(diào)時(shí),this可能丟失綁定。this的取值是在函數(shù)被調(diào)用時(shí)確定的,而不是在函數(shù)被定義時(shí)確定的。