• JavaScript:实例讲解使用ES6中默认参数和剩余参数时的注意事项


    1.如果一个参数有了默认参数值,则其他所有类型的参数(普通参数,默认参数,剩余参数)都不能再有和它有相同的参数名:

    function foo(x, x = 1) {}
    //SyntaxError: duplicate argument names not allowed in this context

    2.普通参数不能放在默认参数的右边:

    function foo(x = 1, y) {}
    //SyntaxError: parameter(s) with default followed by parameter without default

    3.剩余参数必须在参数列表的最右边,它的右边不能再有任何类型的参数(也就是只能有一个剩余参数):

    function foo(...x,y){}
    //SyntaxError: parameter after rest parameter

    4.剩余参数不能有默认参数值:

    function foo(x, ...y = 1) {}
    //SyntaxError: rest parameter may not have a default

    5.默认参数值表达式中不能有yield表达式:

    function foo(x = yield 1) {}
    //SyntaxError: yield in default expression

    6.在使用了剩余参数的函数中不能使用arguments对象:

    function foo(...x) {arguments}  
    //解析时错误
    //SyntaxError: 'arguments' object may not be used in conjunction with a rest parameter
    (function foo(...x) {eval("arguments")})()  
    //执行时错误
    //SyntaxError: 'arguments' object may not be used in conjunction with a rest parameter

    7.如果不在严格模式中,直接把arguments重定义成剩余参数如何?看起来不错,但还是换个名字吧:

    (function foo(...arguments) {return arguments})(1,2,3)
    //[1,2,3]
    (function foo(...rest) {"use strict";return rest})(1,2,3)
    //[1,2,3]

    8. 函数声明提升(hosting),x已经有值,所以,虽然x没有对应实参,但默认参数x的赋值操作x=1也不会执行.

    (function foo(x = 1) {
        function x() {}
        return x;
    })()
    //function x() {}

    上面代码示例的运行环境为Firefox 20.

  • 相关阅读:
    用javafx webview 打造自己的浏览器
    用cef Python打造自己的浏览器
    无需人工智能和机器学习,实现基于手势识别的计算器
    经常抱怨在公司学不到技术,学的技术没有使用场景怎么破?
    Linux相关集合
    个人博客注册,申请,美化流程
    Django注意知识点(二)
    Django 注意知识点(一)
    Java学习笔记(四)
    Java学习笔记(三)
  • 原文地址:https://www.cnblogs.com/ziyunfei/p/2823243.html
Copyright © 2020-2023  润新知