一、基本用法
es6 允許使用「箭頭」(=>)定義函式。
如果箭頭函式的**塊部分多於一條語句,就要使用大括號將它們括起來,並且使用return語句返回。由於大括號被解釋為**塊,所以如果箭頭函式直接返回乙個物件,必須在物件外面加上括號,否則會報錯。var f = () => 5;
// 等同於
var f = function () ;
var sum = (num1, num2) => num1 + num2;
// 等同於
var sum = function(num1, num2) ;
二、三個特點
1.不需要function關鍵字來建立函式
2.省略return關鍵字
3.繼承當前上下文的 this 關鍵字
三、幾個注意點function(i) //es5
(i) => i + 1 //es6
(1)函式體內的this物件,就是定義時所在的物件,而不是使用時所在的物件。
(2)不可以當作建構函式,也就是說,不可以使用new命令,否則會丟擲乙個錯誤。
(3)不可以使用arguments物件,該物件在函式體內不存在。如果要用,可以用 rest 引數代替。
(4)不可以使用yield命令,因此箭頭函式不能用作 generator 函式。
關於this的指向:
上面**中,settimeout的引數是乙個箭頭函式,這個箭頭函式的定義生效是在foo函式生成時,而它的真正執行要等到 100 毫秒後。如果是普通函式,執行時this應該指向全域性物件window,這時應該輸出21。但是,箭頭函式導致this總是指向函式定義生效時所在的物件(本例是),所以輸出的是42。function foo() , 100);
}
var id = 21;
foo.call();
// id: 42
箭頭函式可以讓settimeout裡面的this繫結定義所在的作用域,而不是指向執行所在作用域。
上面**中,timer函式內部設定了兩個定時器,分別使用了箭頭函式和普通函式。前者的this繫結定義時所在的作用域(即timer函式),後者的this指向執行時所在的作用域(即全域性物件)。所以,3100 毫秒之後,timer.s1被更新了 3 次,而timer.s2一次都沒更新。function timer() , 1000);
}
var timer = new timer();
settimeout(() => console.log('s1: ', timer.s1), 3100);
settimeout(() => console.log('s2: ', timer.s2), 3100);
// s1: 3
// s2: 0
看下面的**:
function foo() ;
};};
}
var f = foo.call();
var t1 = f.call()()(); // id: 1
var t2 = f().call()(); // id: 1
var t3 = f()().call(); // id: 1
上面**中,箭頭函式沒有自己的this,所以bind方法無效,內部的this指向外部的this。(function() )()
];}).call();
// ['outer']
es6箭頭函式
本例是在了解es6知識後在原來定義函式的基礎上進行理解var searchvalue 查詢匹配物件 var button var input var select button if searchvalue.input undefined button.click else 重新整理 tableli...
es6 箭頭函式
1.單引數 function cheng a 3 let cheng a 3 a a console.log cheng 9 2.多引數 function add a,b let add a,b a b 預設返回值 console.log add 3,9 3.無返回值 function add a,...
ES6 箭頭函式
es6 中,箭頭函式就是函式的一種簡寫形式,使用括號包裹數,跟隨乙個 緊接著是函式體 var getprice function 箭頭函式 var getprice 9.15 箭頭函式不僅僅是讓 變得簡潔,函式中 this 總是繫結總shi 指向物件自身 function person 1000 使...