這篇文章為大家帶來了關於javascript的相關知識,其中主要介紹了箭頭函數以及this指向的相關問題,普通函數中的this表示調用此函數時的對象。而箭頭函數是沒有自己的this的,箭頭函數裡面的this會繼承自外部的this,下面一起來看一下,希望對大家有幫助。
【相關推薦:javascript影片教學、web前端】
1.箭頭函數
用箭頭=> 定義函數
var fn = function(num){ return num;}var fn1 = (num)=>num;var fn3 = ()=>1;var fn4 = (num1,num2,num3)=>num
如果箭頭函數的程式碼區塊部分有多條語句,就要使用大括號將它們括起來,並且使用return 返回。
var func = (a,b)=>{ return a+b; }
由於花括號{} 被解釋為程式碼區塊,所以如果箭頭函數直接傳回一個對象,必須在對像外加上上花括號,否則會報錯。
var func = (a,b)=>{name:a,age:b} //报错var func4 = (a,b)=>{ return { name: a, age :b } } // 不报错
箭頭函數還有一個更主要的功能: 解決this的指向問題。
2.this指向
先說一下普通函數中的this,普通函數中的this表示呼叫此函數時的物件。而箭頭函數是沒有自己的this的,箭頭函數裡面的this會繼承自外部的this。或是用程式碼
塊的概念解釋會比較直覺:箭頭函數中的this就是外層程式碼區塊的this。舉一個例子:
箭頭函數是ES6中的新增特性,他沒有自己的this,其this指向從外層程式碼庫繼承。
使用箭頭函數時要注意幾點:
- #箭頭函數不能用作建構函數,用的話會拋出一個錯誤
- 無法使用arguments參數,如果要用的話就用rest
- 無法使用yield命令,所以箭頭函數無法用作Generator函數
- 因為沒有自己的this,所以沒法透過bind、call、apply來改變this指向
- 但是這不代表箭頭函數的this指向是靜態的,我們可以透過改變它外層程式碼庫的this指向來控制
- 箭頭函數的this從外層程式碼庫繼承,所以箭頭函數的this是在定義的時候就綁定好了的,而普通函數是在呼叫的時候確定this指向
- 字面量物件中直接定義的箭頭函數的this不綁定該對象,而是往外找一層,最簡單的情況是綁定到window
PS: 實際開發環境中,React可以使用箭頭函數解決一個經典問題,這裡不細說了。
給一個例子看箭頭函數的實際情況:
const obj = { fun1: function () { console.log(this); return () => { console.log(this); } }, fun2: function () { return function () { console.log(this); return () => { console.log(this); } } }, fun3: () => { console.log(this); } } let f1 = obj.fun1(); // obj f1() // obj let f2 = obj.fun2(); let f2_2 = f2(); // window f2_2() // window obj.fun3(); // window
針對每行輸出的分析:
let f1 = obj.fun1() // obj
這裡明顯進行的是隱式綁定,fun1的this指向obj
f1() // obj
這裡執行了上一行返回出來的箭頭函數,我們分析上一層程式碼庫的this指向obj,所以直接繼承,箭頭函數this指向
objlet f2 =obj.fun2()
fun2第一層執行的時候沒有列印程式碼,而是返回了一個函數出來,賦值給f2,並且這裡發生了綁定丟失,this指向由原來的obj指向了window(發生了賦值)
let f2_2 = f2() // window
f2()執行了,印出了改綁的this——window,然後將箭頭函數回傳出來,賦值給f2_2f
2_2() // window
執行列印出window,剛才的外層程式碼的this不是指向了window嗎,所以這裡就繼承了window作為this
obj.fun3() // window
在字面量中直接定義的箭頭函數無法繼承該物件的this,而是往外再找一層,就找到了window,因為字面量物件無法形成自己的一層作用域,但是建構子可以哦。
那我們怎麼操縱箭頭函數的this指向呢:
答案是修改外層程式碼庫的this指向,在箭頭函數定義之前就給this修改方向即可。
在上述程式碼的基礎上:
let fun4 = f2.bind(obj)() // obj fun4() // obj
我們發現修改的是第二層方法的this指向,箭頭函數也繼承了下來。
fun2: function () { return function () { // 我们修改的是这里的this console.log(this); return () => { // 然后这里定义的时候就继承啦 console.log(this); } } },
【相關推薦:javascript影片教學、web前端】
以上是ES6箭頭函數及this指向詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

HTML和React的關係是前端開發的核心,它們共同構建現代Web應用的用戶界面。 1)HTML定義內容結構和語義,React通過組件化構建動態界面。 2)React組件使用JSX語法嵌入HTML,實現智能渲染。 3)組件生命週期管理HTML渲染,根據狀態和屬性動態更新。 4)使用組件優化HTML結構,提高可維護性。 5)性能優化包括避免不必要渲染,使用key屬性,保持組件單一職責。

React是構建交互式前端體驗的首選工具。 1)React通過組件化和虛擬DOM簡化UI開發。 2)組件分為函數組件和類組件,函數組件更簡潔,類組件提供更多生命週期方法。 3)React的工作原理依賴虛擬DOM和調和算法,提高性能。 4)狀態管理使用useState或this.state,生命週期方法如componentDidMount用於特定邏輯。 5)基本用法包括創建組件和管理狀態,高級用法涉及自定義鉤子和性能優化。 6)常見錯誤包括狀態更新不當和性能問題,調試技巧包括使用ReactDevTools和優

React是一個用於構建用戶界面的JavaScript庫,其核心是組件化和狀態管理。 1)通過組件化和狀態管理簡化UI開發。 2)工作原理包括調和和渲染,優化可通過React.memo和useMemo實現。 3)基本用法是創建並渲染組件,高級用法包括使用Hooks和ContextAPI。 4)常見錯誤如狀態更新不當,可使用ReactDevTools調試。 5)性能優化包括使用React.memo、虛擬化列表和CodeSplitting,保持代碼可讀性和可維護性是最佳實踐。

React通過JSX與HTML結合,提升用戶體驗。 1)JSX嵌入HTML,使開發更直觀。 2)虛擬DOM機制優化性能,減少DOM操作。 3)組件化管理UI,提高可維護性。 4)狀態管理和事件處理增強交互性。

React組件可以通過函數或類定義,封裝UI邏輯並通過props接受輸入數據。 1)定義組件:使用函數或類,返回React元素。 2)渲染組件:React調用render方法或執行函數組件。 3)復用組件:通過props傳遞數據,構建複雜UI。組件的生命週期方法允許在不同階段執行邏輯,提升開發效率和代碼可維護性。

React嚴格模式是一種開發工具,可通過激活其他檢查和警告來突出反應應用中的潛在問題。它有助於識別遺產代碼,不安全的生命週期和副作用,鼓勵現代反應實踐。

本文討論了React的對帳過程,詳細介紹了它如何有效地更新DOM。關鍵步驟包括觸發對帳,創建虛擬DOM,使用擴散算法以及應用最小的DOM更新。它還覆蓋了經家


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版
中文版,非常好用