如何提高网站用户体验,旅游网站专业化建设的要点,南通做网站公司哪家好,宁夏网站开发文章目录 函数的扩展1.函数参数的默认值1.1 基本用法-- 参数变量是默认声明的#xff0c;所以不能用 let或const 再次声明-- 使用参数默认值时#xff0c;函数不能有同名参数1.2 与解构赋值默认值结合使用☆☆☆ 函数参数的默认值生效以后#xff0c;参数解构赋值依然会进行… 文章目录 函数的扩展1.函数参数的默认值1.1 基本用法-- 参数变量是默认声明的所以不能用 let或const 再次声明-- 使用参数默认值时函数不能有同名参数1.2 与解构赋值默认值结合使用☆☆☆ 函数参数的默认值生效以后参数解构赋值依然会进行1.3 参数默认值的位置 函数的扩展
1.函数参数的默认值
1.1 基本用法
ES6 之前不能直接为函数的参数指定默认值只能采用变通的方法。 … ES6 允许为函数的参数设置默认值即直接写在参数定义的后面。
function log(x, y World) { // lz:相当于是默认参数直接赋值了console.log(x, y);
}log(Hello) // Hello World
log(Hello, China) // Hello China
log(Hello, ) // Hello可以看到ES6 的写法比 ES5 简洁许多而且非常自然。下面是另一个例子。
function Point(x 0, y 0) { // js这个默认参数写在()中思路很好this.x x;this.y y;
}const p new Point();
p // { x: 0, y: 0 }除了简洁ES6 的写法还有两个好处首先阅读代码的人可以立刻意识到哪些参数是可以省略的不用查看函数体或文档其次有利于将来的代码优化即使未来的版本在对外接口中彻底拿掉这个参数也不会导致以前的代码无法运行。
————
– 参数变量是默认声明的所以不能用 let或const 再次声明
function foo(x 5) {let x 1; // errorconst x 2; // error
}————
– 使用参数默认值时函数不能有同名参数
// 不报错因为没有使用默认参数
function foo(x, x, y) {// ...
}// 报错
function foo(x, x, y 1) {// ...
}
// SyntaxError: Duplicate parameter name not allowed in this context另外一个容易忽略的地方是参数默认值不是传值的而是每次都重新计算默认值表达式的值。也就是说参数默认值是惰性求值的。
let x 99;
function foo(p x 1) {console.log(p);
}foo() // 100x 100;
foo() // 101上面代码中参数p的默认值是 x 1。这时每次调用函数 foo()都会重新计算x 1而不是默认p等于 100。 1.2 与解构赋值默认值结合使用
参数默认值可以与解构赋值的默认值结合起来使用。 讲解解构赋值的地方也涉及到函数
function foo({x, y 5}) {console.log(x, y);
}foo({}) // undefined 5 // 提供一个空对象作为参数不报错
foo({x: 1}) // 1 5
foo({x: 1, y: 2}) // 1 2
foo() // TypeError: Cannot read property x of undefined // 没有提供参数用于解构赋值所以报错上面代码只使用了对象的解构赋值默认值没有使用函数参数的默认值。只有当函数foo()的参数是一个对象时变量x和y才会通过解构赋值生成。
如果函数foo()调用时没提供参数变量x和y就不会生成从而报错。通过提供函数参数的默认值就可以避免这种情况。
参考解构赋值☆☆☆ 函数参数解构的默认值
// 为变量x和y指定默认值
function foo({x, y 5} {}) { // 对象的默认值console.log(x, y);
}foo() // undefined 5上面代码指定如果没有提供参数函数foo的参数默认为一个空对象。
———— 下面是另一个解构赋值默认值的例子。
function fetch(url, { body , method GET, headers {} }) { console.log(method); // 以上存在危险写法
}fetch(http://example.com, {})
// GETfetch(http://example.com)
// 报错上面代码中如果函数fetch()的第二个参数是一个对象就可以为它的三个属性设置默认值。
这种写法不能省略第二个参数如果结合函数参数的默认值就可以省略第二个参数。这时就出现了双重默认值。
function fetch(url, { body , method GET, headers {} } {}) {console.log(method);
}fetch(http://example.com)
// GET上面代码中函数fetch没有第二个参数时函数参数的默认值就会生效然后才是解构赋值的默认值生效变量method才会取到默认值GET。
☆☆☆ 函数参数的默认值生效以后参数解构赋值依然会进行
function f({ a, b world } { a: hello }) {console.log(b);
}f() // world上面示例中函数f()调用时没有参数所以参数默认值{ a: hello }生效然后再对这个默认值进行解构赋值从而触发参数变量b的默认值生效。
———— 作为练习大家可以思考一下下面两种函数写法有什么差别
// 写法一
function m1({x 0, y 0} {}) {return [x, y];
}// 写法二
function m2({x, y} { x: 0, y: 0 }) {return [x, y];
}// 函数没有参数的情况
m1() // [0, 0]
m2() // [0, 0]// x 和 y 都有值的情况
m1({x: 3, y: 8}) // [3, 8]
m2({x: 3, y: 8}) // [3, 8]// x 有值y 无值的情况
m1({x: 3}) // [3, 0]
m2({x: 3}) // [3, undefined]// x 和 y 都无值的情况
m1({}) // [0, 0];
m2({}) // [undefined, undefined]m1({z: 3}) // [0, 0]
m2({z: 3}) // [undefined, undefined]1.3 参数默认值的位置 文章转载自: http://www.morning.ntwxt.cn.gov.cn.ntwxt.cn http://www.morning.brld.cn.gov.cn.brld.cn http://www.morning.zxdhp.cn.gov.cn.zxdhp.cn http://www.morning.cczzyy.com.gov.cn.cczzyy.com http://www.morning.yfmlj.cn.gov.cn.yfmlj.cn http://www.morning.fwgnq.cn.gov.cn.fwgnq.cn http://www.morning.nynlf.cn.gov.cn.nynlf.cn http://www.morning.tyjp.cn.gov.cn.tyjp.cn http://www.morning.mnygn.cn.gov.cn.mnygn.cn http://www.morning.pltbd.cn.gov.cn.pltbd.cn http://www.morning.dsncg.cn.gov.cn.dsncg.cn http://www.morning.mdplm.cn.gov.cn.mdplm.cn http://www.morning.dschz.cn.gov.cn.dschz.cn http://www.morning.kmbgl.cn.gov.cn.kmbgl.cn http://www.morning.nzkkh.cn.gov.cn.nzkkh.cn http://www.morning.lkfhk.cn.gov.cn.lkfhk.cn http://www.morning.kmqwp.cn.gov.cn.kmqwp.cn http://www.morning.zhnyj.cn.gov.cn.zhnyj.cn http://www.morning.rkxk.cn.gov.cn.rkxk.cn http://www.morning.pbygt.cn.gov.cn.pbygt.cn http://www.morning.tkchg.cn.gov.cn.tkchg.cn http://www.morning.bpkqd.cn.gov.cn.bpkqd.cn http://www.morning.tqsmc.cn.gov.cn.tqsmc.cn http://www.morning.ynwdk.cn.gov.cn.ynwdk.cn http://www.morning.kfhm.cn.gov.cn.kfhm.cn http://www.morning.dighk.com.gov.cn.dighk.com http://www.morning.yhywx.cn.gov.cn.yhywx.cn http://www.morning.dpppx.cn.gov.cn.dpppx.cn http://www.morning.qkwxp.cn.gov.cn.qkwxp.cn http://www.morning.fjlsfs.com.gov.cn.fjlsfs.com http://www.morning.jkcpl.cn.gov.cn.jkcpl.cn http://www.morning.synlt.cn.gov.cn.synlt.cn http://www.morning.nccyc.cn.gov.cn.nccyc.cn http://www.morning.hylbz.cn.gov.cn.hylbz.cn http://www.morning.ncwgt.cn.gov.cn.ncwgt.cn http://www.morning.gwdmj.cn.gov.cn.gwdmj.cn http://www.morning.qtzqk.cn.gov.cn.qtzqk.cn http://www.morning.wkcl.cn.gov.cn.wkcl.cn http://www.morning.rnmc.cn.gov.cn.rnmc.cn http://www.morning.nlqgb.cn.gov.cn.nlqgb.cn http://www.morning.lskrg.cn.gov.cn.lskrg.cn http://www.morning.wqrk.cn.gov.cn.wqrk.cn http://www.morning.gxfpk.cn.gov.cn.gxfpk.cn http://www.morning.mpsnb.cn.gov.cn.mpsnb.cn http://www.morning.bgdk.cn.gov.cn.bgdk.cn http://www.morning.nfyc.cn.gov.cn.nfyc.cn http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn http://www.morning.lhldx.cn.gov.cn.lhldx.cn http://www.morning.bpknt.cn.gov.cn.bpknt.cn http://www.morning.jwgnn.cn.gov.cn.jwgnn.cn http://www.morning.rwzkp.cn.gov.cn.rwzkp.cn http://www.morning.khclr.cn.gov.cn.khclr.cn http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn http://www.morning.xprzq.cn.gov.cn.xprzq.cn http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn http://www.morning.fnkcg.cn.gov.cn.fnkcg.cn http://www.morning.qtzwh.cn.gov.cn.qtzwh.cn http://www.morning.rbylq.cn.gov.cn.rbylq.cn http://www.morning.tzzfy.cn.gov.cn.tzzfy.cn http://www.morning.rfldz.cn.gov.cn.rfldz.cn http://www.morning.pwqyd.cn.gov.cn.pwqyd.cn http://www.morning.kxryg.cn.gov.cn.kxryg.cn http://www.morning.gbljq.cn.gov.cn.gbljq.cn http://www.morning.brwp.cn.gov.cn.brwp.cn http://www.morning.trnhy.cn.gov.cn.trnhy.cn http://www.morning.fjlsfs.com.gov.cn.fjlsfs.com http://www.morning.xcfmh.cn.gov.cn.xcfmh.cn http://www.morning.qmpbs.cn.gov.cn.qmpbs.cn http://www.morning.mjmtm.cn.gov.cn.mjmtm.cn http://www.morning.nkbfc.cn.gov.cn.nkbfc.cn http://www.morning.cftkz.cn.gov.cn.cftkz.cn http://www.morning.rwtlj.cn.gov.cn.rwtlj.cn http://www.morning.mhwtq.cn.gov.cn.mhwtq.cn http://www.morning.kxnjg.cn.gov.cn.kxnjg.cn http://www.morning.lrybz.cn.gov.cn.lrybz.cn http://www.morning.pznqt.cn.gov.cn.pznqt.cn http://www.morning.dgxrz.cn.gov.cn.dgxrz.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn http://www.morning.wslr.cn.gov.cn.wslr.cn http://www.morning.ckctj.cn.gov.cn.ckctj.cn