亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于es6的函數默認參數

關于es6的函數默認參數

千巷貓影 2018-08-07 10:09:57
let x = 1;    // default parameter     function printY(y = x) {        let x = 2;        console.log(y);     }     printY(); // 打印出1          function printY2(y) {         y = x;        let x = 2;        console.log(y);     }請教一下,上面printY函數為什么會打印出全局變量x = 1的值(在node運行的)?為什么給y的默認值是全局變量x?給參數y賦默認值,與printY2方法有什么區別?誠心求解釋一下,有點迷糊 ~~~
查看完整描述

1 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

是這樣的,在形如:

function f(x = expression) {
    ...
}

的函數聲明中,expression中出現的變量是存在于外部作用域的(雖然它和等號左邊的x一樣是在函數定義的括號里),所以你問題中的x是全局作用域中的。

第二個會報錯,因為let定義的變量不允許提前使用。當然,為了不讓它報錯,我們把let換成var。此時printY2與參數默認值有什么區別呢?當然不一樣。默認值是在沒有傳參的時候給賦的值;而prinY2呢,不管有沒有傳參,y都被賦值成了x。

所以,如果要等價的話,也要這么寫:

function printY2(y) {    if(y === undefined) {
        y = x;
    }
    ...
}


查看完整回答
反對 回復 2018-09-21
  • 1 回答
  • 0 關注
  • 540 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號