es6-函數的擴展
阿新 • • 發佈:2018-11-20
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-函數的擴展