es6和es5函數參數和arguments的差別


注: 這里說的 es5 代表的都是非嚴格模式下。

 

es6之前函數的參數不能傳默認值:

function fn(a, b){
    console.log(a)
    console.log(b)
}
fn(2)
// 2
// undefined

如果調用函數的時候傳不傳入對應的參數,則參數的值為 undefined。

 

 

es6中查參數可以設置默認值,且默認值可以是任何類型(變量,數字、函數等)。

 

默認值為數字、字符串等非函數和變量:

function fn(a, b=3){
    console.log(a)
    console.log(b)
}

fn(2)
// 2
// 3

 

默認值為變量:

let d = 5;
function fn(a, b=a, c=d){
    console.log(a)
    cosnole.log(b)
    cosnole.log(c)
}
fn(2)
// 2
// 2
// 5

注意:默認值是變量且變量也是當前函數的參數的話,不能將后面的變量賦值給前面的參數當默認值,如上面代碼,能將參數 a 賦值給 b ,但是不能將 b 賦值給 a 。

 

 

默認值為函數:

function testfn(){
    return 'test'
}
function fn(a, b=testfn()){
    console.log(a)
    console.log(b)
}
fn(2)
// 2
// test

注意,默認值如果是函數的話,只有在調用 fn 函數,且未傳值的時候,才會調用。

 

 

es6和es5函數 arguments 的差別:

arguments 是函數傳入的實參,在es6中,如果函數有設置默認值,那么修改參數變量的值,不會影響 arguments 里面值,如:

function fn(a, b=5){
    a = 3;
    console.log(a)
    console.log(arguments[0])
}
fn(2)
// 3
// 2

這里,我在函數內部將參數 a 的值改成了 3,但是arguments[0] 的值還是傳入的2。

 

如果定義函數的時候,沒有設置默認值,那么修改參數的值會導致 arguments 里面的值同步被修改,如:

function fn(a, b){
    a = 3;
    console.log(a)
    console.log(arguments[0])
}
fn(2)
// 3
// 3

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM