1. 程式人生 > >es6-函數的擴展

es6-函數的擴展

yield 錯誤 就是 需要 UNC tex eset spa color

  /*
    * 1:函數參數的默認值
    * */
    !(() => {
        function f(x, y = 1, z = 1, g = 1) {
            console.log(x, y, z, g);//1,1,false,null

        }

        f(1, undefined, false, null);

    })();

    /*
    * 2與解構賦值結合使用
    * */
    !(() => {
        function f({x = 1, y} = {}) {
            console.log(x, y)
        }

        
function f1({x, y} = {x: 1}) { console.log(x, y) } f();//1,undefined f({});//1,undefined f1();//1,undefined f1({});//undefined,undefined })() /* * 3函數的length屬性 * */ console.log((function (a) { }).length);//1 console.log((function (a, x = 2, e, r) { }).length);
//1 console.log((function (...args) { }).length);//0 /* * 4:函數的作用域 * ---- 一旦設置了參數的默認值,函數進行聲明初始化時,參數會形成一個單獨的作用域(context)。等到初始化結束,這個作用域就會消失。這種語法行為,在不設置參數默認值時,是不會出現的。 * ----暫時死區 * */ /* * * 5 rest參數(因為箭頭函數作用域中午argument對象 用rest參數代替) * rest 是數組argument不是 * rest 參數必須放在最後一位(不然報錯) *
*/ function add(a,...values) { console.log(values); } add(2, 5, 3) // 10 /* * 6:函數的name屬性 * Function構造函數返回的函數實例,name屬性的值為anonymous。 * (new Function).name // "anonymous" *ind返回的函數,name屬性值會加上bound前綴。 * function foo() {};foo.bind({}).name // "bound foo" (function(){}).bind({}).name // "bound " * */ /* * 7箭頭函數 * (1)函數體內的this對象,就是定義時所在的對象,而不是使用時所在的對象。 (2)不可以當作構造函數,也就是說,不可以使用new命令,否則會拋出一個錯誤。 (3)不可以使用arguments對象,該對象在函數體內不存在。如果要用,可以用 rest 參數代替。 (4)不可以使用yield命令,因此箭頭函數不能用作 Generator 函數。 * */
 /*
    * 箭頭函數
    *   1:this指向函數外部的this(函數定義時候的this指向) 對象的方法中的箭頭函數this 指向對象所造作用域的this 非箭頭函數時 this指向這個對象
    *   2:不可當做構造函數來new 箭頭函數 會報錯
    *   3:箭頭函數沒有argument 用reset參數代替 (形式為...變量名)(變量名是相當於argument)
    *
    *
    *
    * 函數中的函數 有多個調用幀 然後形成調用棧 尾調用不需要保留外層函數的調用幀
    * 尾調用優化 函數內部不調用函數外部的變量
    *
    * */

    let f=(x,y=2)=>x+1+y;
    console.log(f(1));
    // new f();
    function f1(a,b,c) {
        console.log(arguments);
        console.log(arguments.constructor);
        console.log(arguments.constructor.name);
        return a+b+c;
    }
    f1(1,2,3);
    ((...value)=>{
        console.log(value)

    })(1,2,3,4);

    const cat = {
        lives: 9,
        jumps: function ()  {
            console.log(this);
            this.lives--;
            return this.lives;
        }
    }
    console.log(cat.jumps());//8
    console.log(cat.jumps());//7
    console.log(cat.jumps());//6

es6-函數的擴展