ES 6の矢印関数詳細(thisの指向とポイント)
10573 ワード
まず、矢印関数と一般関数を比較します.
1、書き方
一般関数は多くの を簡潔にしました.パラメータが一つしかない場合、括弧は を省略することができます.行のコードがある場合は、大かっこを省略し、デフォルトでは、行コードの前に はいずれも を指す.は、 を有する.
3、関数内のthisの指向
一般関数の一般関数の も指す.矢印関数のthisは、声明の中で に向けられている.
一般関数の3つの方法は全部 に適用されます.矢印関数の特殊性のための3つの方法は全部 を適用しない.は、構造関数 としては使用できません.アーグメンnts は使用できません.は、コールされたオブジェクト ではなく、コンテキストを指しているので、オブジェクトとして呼び出すことができません. this操作が必要であれば、addEventListenerで送信されるパラメータ としては使用できません.
1、書き方
一般関数
function(a) {
console.log(a)
return a
}
矢印関数(a) => {
console.log(a)
return a
}
a => {
console.log(a)
return a
}
return
を追加します.ですから、return
を追加すると、エラーが発生します.function b() {
return 1
}
//
() => b() √ // 1
() => return b() ×//
2、関数の属性Function
に受け継がれ、プロトタイプはFunction.prototype
name
とlength
(パラメータ個数)の2つの属性3、関数内のthisの指向
一般関数
this
は、宣言時にwindow
を指し、呼び出し時にそのオブジェクトを指す.直接呼出するならば、window
function b() {
function a(){ console.log(this) }
let c = function() {a()}
let obj2 = {a,c}
obj2.a()// obj2, obj2
obj2.c()// window, window
}
let obj = {b}
obj.b()// b this obj
矢印関数window
に向けられ、呼び出し時に声明の中にあるコンテキストthis
function b() {
let a = () => console.log(this)
let c = function() {a()}
let obj2 = {a,c}
obj2.a()// obj, ,
obj2.c()// obj, ,
}
let obj = {b}
obj.b()// b this obj
4、callについて、appy、bind一般関数
let obj = {}
let a = function() { console.log(this) }
a.call(obj)//obj
a.apply(obj)//obj
a = a.bind(obj)
a()//obj
矢印関数let obj = {}
let a = () => { console.log(this) }
a.call(obj)//window
a.apply(obj)//window
a.bind(obj)
a()//window
矢印関数の注意事項