javascript的箭頭函式this問題?

時間 2021-06-18 21:36:47

1樓:吳浩亮

箭頭函式 this 是此詞法作用域,然後你看下它所在的作用域,取決於 fn(),所以問題就轉移到 fn() 中的 this 指向誰。

2樓:

箭頭函式的this到底指向啥?簡單的判別方法是,把箭頭函式整個替換為this,看看這個this是啥;(我知道這裡的setTimeout要求第乙個形參為可呼叫的東西,但this是詞法意義上的,所以把this作為實參放到這裡沒毛病)

那麼替換完了是啥?

letuser=}

這裡this是啥?

是fn()的this沒錯吧?

fn()是個啥?

是個user的方法;

user物件方法的this是啥?

是user。

上面為簡單回答,那麼實際上是為啥呢?

你在呼叫乙個函式時,所提供的實參的作用域當然是所在的外部作用域鏈上,總不可能是被呼叫函式內部吧?那還能傳啥實參,統統自閉得了;

那麼巧了,this的所謂外部this,說的不就是所在的外部作用域嗎?這就是箭頭函式作為lambda的意義,它不建立也不繫結自己的「所謂」this上下文,外部的變數統統可以傳進來,包括但不限於普通的變數(普通函式和函式表示式都能做到的閉包,this也得做到)還有奇異的普通函式/函式表示式做不到的this和arguments物件;

更妙的是,箭頭函式由於其沒有原型的奇妙特性,還帶來了意想不到(…也能想得到?)的好處。就是它捕獲外部變數的時候,是捕獲它宣告時所在的作用域;而如果換成普通的函式或函式表示式的話,this可是會隨著呼叫者的不同而亂變的:

這是張不知道從哪來的圖,但是挺有用的。

JavaScript語言如何實現等待函式值為真的操作?

navegador 如果你不介意真實阻塞,那使用Atomic.wait,這個喚醒比較麻煩,只能從另乙個worker 喚醒。這個是真實掛起阻塞的 但是不是while那種佔CPU的阻塞 suooq 我怎麼理解你這個問題?我分析下 函式值指的是返回值 獲取函式返回值只有呼叫它 等待值為真,意思是無限制呼叫...

是不是 JavaScript 函式式程式設計的 Pointfree Style 有時會喪失程式可讀性?

胖虎 如果不考慮 this 我認為其實可讀性更高的const aSet new Set someArrary.forEach aSet.add 這本是乙個很適合的例子,但是無法正常執行 因為 add 的 this 指向不正確了 已重置 嘗試用HS 純函式式語言 做了下,與題主的邏輯相同。data P...

JavaScript 函式的屬性新增在哪了?

源天陳 sfFunc是建構函式也是Function的例項 sfFunc.proto Function.prototype Function.prototype.proto Object.prototype 所以給sfFunc新增的屬性,其實就是給Fun的例項物件新增了乙個屬性 我覺得你可以在cons...