只寫了部分內容,詳細了解 es6入門
函式的name屬性會返回函式名,這個屬性在 es6 之前就已經被絕大多數瀏覽器支援,只是在 es6 完善了這個屬性以及新增了一些新內容而已。
function
foo(
)console.
log(foo.name)
;//foo
letf
=function()
;console.
log(f.name)
;//f
letbar
=function
baz();
console.
log(bar.name)
;//baz
第一塊**,定義了函式名為 foo 的函式,所以 name 屬性返回 foo
第二塊**,定義了乙個匿名函式並將其賦值給變數 f,此時匿名函式的函式名相當於是 f 了,所以 name 屬性返回 f
第三塊**,定義了名為 baz 的函式,並將其賦值給變數 bar,name屬性是返回函式名的,所以還是會返回 baz
es6 允許使用「箭頭」(=>)定義函式。
//es6 新寫法
varf
= v => v;
//等價於 es5 寫法
varf
=function
(v);
如果箭頭函式不需要引數或需要多個引數,就使用乙個圓括號代表引數部分。
//es6 新寫法
varf=(
)=>1;
//等價於 es5 寫法
varf
=function()
;//es6 新寫法
varf
=(num1,num2)
=> num1 + num2;
//等價於 es5 寫法
varf
=function
(num1,num2)
;
如果箭頭函式的**塊部分多於一條語句,就要使用大括號將它們括起來,並且使用return語句返回。
var
sum=
(num1, num2)
=>
;
由於大括號被解釋為**塊,所以如果箭頭函式直接返回乙個物件,必須在物件外面加上括號,否則會報錯。
// 報錯
letgettempitem
= id =>
;// 不報錯
letgettempitem
= id =>()
;
箭頭函式可以與變數解構結合使用。
const
full=(
)=> first +
' '+ last;
// 等同於
function
full
(person)
箭頭函式使函式表達變得更加簡潔,同時使用它也有幾個注意點
注意點
(1)函式體內的this物件,就是定義時所在的物件,而不是使用時所在的物件。
(2)不可以當作建構函式,也就是說,不可以使用new命令,否則會丟擲乙個錯誤。
(3)不可以使用arguments物件,該物件在函式體內不存在。如果要用,可以用 rest 引數代替。
(4)不可以使用yield命令,因此箭頭函式不能用作 generator 函式。
上面四點中,第一點尤其值得注意。this物件的指向是可變的,但是在箭頭函式中,它是固定的。
function
foo(),
100);}
var id =21;
foo.
call()
;// id: 42
上面**中,settimeout的引數是乙個箭頭函式,這個箭頭函式的定義生效是在foo函式生成時,而它的真正執行要等到 100 毫秒後。如果是普通函式,執行時this應該指向全域性物件window,這時應該輸出21。但是,箭頭函式導致this總是指向函式定義生效時所在的物件(本例是),所以輸出的是42。
箭頭函式不適用場景:
第乙個場合是定義物件的方法,且該方法內部包括this。
第二個場合是需要動態this的時候,也不應使用箭頭函式。
(比如 a.onclick = function(); 這種場景是不適合使用 this 的)
函式的擴充套件
函式的擴充套件有以下三個方面 1 函式的預設值 2 rest引數 3 箭頭函式 函式的預設值 es5傳預設值時,的兩種方法 1 條件判斷 2 三元運算子 bug,如果a 0時,回去後面的值 var sum function a,b es6 let sum a 2,b 3 sum 2,3 rest引數...
函式的擴充套件
函式的擴充套件 1.引數預設值 2.引數的解構賦值 3.rest引數 4 擴充套件運算子 如果不傳值,則預設的值為hello,傳值之後為jieke function foo param foo jieke function foo param hello foo 引數的預設 function foo...
函式引數的擴充套件。
1 函式引數的擴充套件。1 函式引數的預設值。1 c 在函式宣告時為函式提供乙個預設的引數值。當函式呼叫沒有引數的值的時候,使用預設引數。void test int x 0 int main void test int x 2 引數預設值必須在函式宣告中指定。3 函式定義中是否可以存在引數的預設值?...