從settTimeout到匿名函式、箭頭函式之() => {}
1、使用到了setTimeout函式,困惑:為什麼使用() => {}。
setTimeout(() => {
if (XXX)
{ this.save();
}
this.index = null;}, 10);
2、檢視setTimeout()的定義:
declare function setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;
第一個引數是TimerHandler,檢視其格式定義
type TimerHandler = string | Function;
發現該引數需要是string或者function。
3、() => {}是js中匿名函式的定義方式
(a,b) => {console.log(a);}
相當於
function(a,b){console.log(a);}
同理
setTimeout(() => {
if (XXX)
{ this.save();
}
this.index = null;}, 10);
可以寫成
setTimeout(
function() {
if (XXX)
{ this.save(); }
this.index = null;
}, 10);
但嘗試寫成上面的方式卻報錯了,原因在於:
箭頭函式看上去是匿名函式的一種簡寫,但實際上,箭頭函式和匿名函式有個明顯的區別:箭頭函式內部的this是詞法作用域,由上下文確定。
this的指向:使用function定義的函式,this的指向隨著呼叫環境的變化而變化,而箭頭函式中的this指向是固定不變的,一直指向定義函式的環境。
//使用function定義的函式
function foo(){
console.log(this);
}
var obj = { aa: foo };
foo(); //Window
obj.aa() //obj { aa: foo }
//使用箭頭函式定義函式
var foo = () => { console.log(this) };
var obj = { aa:foo };
foo(); //Window
obj.aa(); //Window
相關文章
- 箭頭函式函式
- TypeScript 箭頭函式TypeScript函式
- JavaScript 箭頭函式JavaScript函式
- JS箭頭函式JS函式
- 箭頭函式與普通函式區別函式
- 箭頭函式、簡寫函式、普通函式的區別函式
- 箭頭函式中的this函式
- 有關箭頭函式函式
- 箭頭函式詳解函式
- ES6 系列之箭頭函式函式
- PHP 7.4 新特性之箭頭函式PHP函式
- 箭頭函式與普通函式的區別函式
- # 普通函式和箭頭函式的區別函式
- 從 ES6 高階箭頭函式理解函式柯里化函式
- 箭頭函式this指向詳解函式
- 箭頭函式this指向的陷阱函式
- ES6箭頭函式函式
- 箭頭函式的this指向(二)函式
- 深入理解 函式、匿名函式、自執行匿名函式函式
- 簡述箭頭函式和普通函式的區別函式
- 箭頭函式和普通函式的10個區別函式
- ES6系列之箭頭函式全解析函式
- JS中的箭頭函式與thisJS函式
- 2020-10-18 箭頭函式函式
- JavaScript(ES6)—箭頭函式JavaScript函式
- 詳解箭頭函式和普通函式的區別以及箭頭函式的注意事項、不適用場景函式
- Day 59/100 箭頭函式和普通函式的區別函式
- 面試題:箭頭函式和普通函式的區別面試題函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- Python函式與lambda 表示式(匿名函式)Python函式
- 測開之函式進階· 第4篇《匿名函式》函式
- 深入理解箭頭函式和傳統函式的區別函式
- JavaScript 匿名函式JavaScript函式
- Golang匿名函式Golang函式
- Ruby 匿名函式函式
- PHP匿名函式PHP函式
- Go 匿名函式Go函式
- 匿名函式(Python)函式Python