ES6 函式 箭頭函式 箭頭函式中的this

2021-10-21 15:30:51 字數 3683 閱讀 6148

1,es6中,函式新增哪些特性:支援引數有預設值,支援剩餘引數,支援引數展開運算,新建箭頭函式(ie不支援箭頭函式)

2,支援引數預設值:在為傳引數值或傳遞的引數值是undefined的情況下,引數取預設值。

//引數b有預設值 'hello'

function test(a, b='hello')

//未傳引數給引數b

test('hi');

//'hi'

//'hello'

//傳遞 undefined作為引數b的值

test('hi', undefined);

//'hi'

//undefined

//null是個有效的值,於是被賦給了引數b

test('hi', null);

//'hi'

//null

3,支援剩餘引數:剩餘引數沒有明確列出引數名的鮮明、具體、語義,引數剩餘可用於當可能有多個引數的情況下或不確定呼叫時會傳幾個引數,類似於argumets,但又不同於arguments。

//當不確定引數個數時,可以考慮使用剩餘引數

//args是個簡單陣列,與arguments變數不同。

function test(...args)

test(1, 4, 6);

//[1,4,6]

//剩餘引數只能至於引數列表末尾,不然會報錯。

function test(...args, a)

//syntaxerror: rest parameter must be last formal parameter

//以下是正確的寫法

//當剩餘的引數個數小於0時,args是個空陣列。

function test(a, b, ...args)

test('hi');

//'hi'

//undefined

//0

4,支援引數展開運算:

function test(a, b, c)

//呼叫函式時,引數展開運算,運算元必須是個可迭代物件

test(...[2, 1]);

//2//1

//undefined

//箭頭函式語法:---------

//最簡單的是

var fn = x => x*x; //引數是x,隱式地返回表示式的值。

fn(6);

//36

//當沒有接收引數或多個引數的時候,需要顯示使用括號

() => console.log(hi);

(x, y) => x+y;

//當函式體是宣告語句或多條語句時,需要用花括號括起**形成**塊。

//不然會報錯,即使是一條return語句。

//()=> return true; ()=> var a='kl'; //這都會報錯。

//這個時候若要返回資料,需要顯示地寫上retrun 語句。

(x, y) => ;

//需要注意的地方:--------------

//1,注意運算優先順序解析規則,是這樣的情況:

var conditiona;

conditiona || function(){}; //正常的表示式

conditiona || ()=> 7; //這會報錯,需要用括號括起箭頭函式

//syntaxerror: malformed arrow function parameter list

conditiona || (()=> 7); //正常

var test = (x)=> ;

var bindfn = test.bind();

bindfn(9);

//undefined //因為this的繫結的上下文環境是全域性。

//'9'

test.call(, 9);

//上面兩行**的結果跟使用bind函式的結果一樣。

//3,當返回字面量物件時

() => ; //這樣沒辦法返回物件的,因為花括號被當作**塊

() => ();

//or

() => }; //相比之下,還是上一句的比較簡潔。

//4,箭頭函式不能使用super、new.target、arguments,因為會報錯。

//本文章提到的普通函式是指非箭頭函式的一般函式,

在直接呼叫函式時值是undefined,被當作建構函式執行,new.target是建構函式本身:

function person()

person();

//undefined

new person(); 是person

//function persion()

//5,prototype 為undefined

//像普通函式的其他特點如:支援引數有預設值,支援剩餘引數,支援引數解構,閉包,遞迴等---------

6,箭頭函式中,this的規則:那麼,怎麼確認箭頭函式中的this繫結的是哪個作用域下的??以下例子可以表明這一點:

//文件說箭頭函式的this是在定義的時候確定它的值。

var a = 'here, hello';

//這種情況下,在定義obj的時候也在以下這個箭頭函式,-------------

//它繫結的this是在定義的時候的上下文,global,在這裡先當global是window,

是window.a,所以:

var obj =

};obj.b();

//'here, hello'

//但是下面這樣就不同了-----------

var obj = );

}}//下面語句執行到b函式體時,箭頭函式定義時所處的上下文環境是b函式,而此時的this正是obj

obj.b();

//'hi'

//再來比較下面**的操作:--------------

function person()

}var person = new person(); //按理說,this繫結的是person這個例項,那麼以下的執行會是什麼結果

var bfn = person.b; //b函式體未被執行,箭頭函式還未定義

bfn()();//第乙個括號呼叫b函式,箭頭函式這時定義,但此時的b函式內的this指向變了,是window。

//'here, hello'

//'here, hello'

var nresult = person.b();//這種呼叫例項方法的方式,b方法裡this是person,箭頭這時定義

//'construct'

nresult();

//'construct'

//那麼,以上的例子足以用於判斷不同情況下箭頭函式this的指向。

//這裡提到的繫結,指向,this的值,上下文環境的這些詞彙,且在廣義下當它們是乙個意思。

//狹義下,繫結,如bind方法為函式繫結this之後,返回乙個this的值不會變函式,

//又如箭頭函式的this在定義時繫結,之後不管在哪執行不變。

//上下文環境,所處的乙個環境,比如在函式體內也是乙個環境。

7,其他文件(後面補上)

改變this的指向

函式中this的指向

8參考文件

mdn箭頭函式

runoobes6函式

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 使...