美文网首页
027进阶函数-02 函数的五种声明方式

027进阶函数-02 函数的五种声明方式

作者: 夜未央_M | 来源:发表于2019-01-07 17:03 被阅读5次

    第一种:具名函数

    function x(input1, input2){
        return undefined  // 一个函数必须有一个终止的程序,就是 return,如果你不写,那么浏览器也会帮我们加上。
    }
    

    这里的(input1, input2)是2个变量,function是一个关键字,和 var 的作用是一样的,var 是声明一个变量,function 是声明一个函数,那么变量和函数有什么区别呢?

    1.变量可以包含7种数据类型 (Boolean、Null、Undefined、Number、String、Symbol、Object)
    2.如果 function x, 那么这个 x 就一定是一个函数,也就是说这是一个特别的变量, x就是这个函数的名字,我们可以通过consolo.log(x)给输出出来。 我们原来说过 consolo.log只接受字符串,如果不是字符串,则会自动调用 x.toString()方法来得到 string

    打印出来的东西 和 return 的东西没有任何关系,不要认为打印出来什么就返回什么!!!

    第二种:匿名函数 (没有名字且将函数赋值给一个变量)

    function (input1, input2){
        return undefined 
    }
    

    上述的例子中,如果单独的去写一个匿名函数的话是会报错的,匿名函数必须赋值给一个变量才可以。

    第三种:具名函数赋值给一个变量

    var x = funciton y(input1, input2){}
    

    那么var x = funciton y(input1, input2){} 和直接声明一个 funciton y(){} 有什么区别呢?

    第四种:window.Function 函数对象(程序员一般不会采用此方法)

    new Function('第一个参数', '第二个参数', 'return x+y')

    Function构造函数接受三个参数,除了最后一个参数是add函数的“函数体”,其他参数都是add函数的参数。
    你可以传递任意数量的参数给Function构造函数,只有最后一个参数会被当做函数体,如果只有一个参数,该参数就是函数体。

    “函数体”部分用字符串表示,字符串是可以拼接的,拼接的过程中可以加变量

    new Function('x', 'y', 'return x+y')
    
    var n = 1
    f = new Function('x', 'y', 'return x +' +n+ '+y' ) 
    //等同于 f = new Function('x', 'y', 'return x + y +' +n)  
    //上面单引号里面的+表示运算+ 外面的+表示拼接,整个拼接之后就是 return 1+2+1
    //那么 f(1, 2)的值为 4 
    

    Function构造函数可以不使用new命令,返回结果完全一样。总的来说,这种声明函数的方式非常不直观,几乎无人使用。

    第五种:箭头函数(比较炫酷的)

    注意:箭头函数一定是匿名的,这个语法就没有给我们写名字的地方。
    f = (x, y)=>{return x+y}
    //等号右边的是一个匿名函数(箭头函数)


    sum = (x, y) => { return x+y }
    //★★★★如果花括号内只有一句执行内容
    //那么这个花括号和 return可以去掉 ,等同于如下:
    sum = (x, y) => x+y
    //★★★★★如果参数只有一个的话,那么圆括号也可以不要,如下:
    n2=n =>n*n
    
    

    总结一下

    function f(x, y){return x+y}
    f = function{}
    f = function x(){}
    f = new Function('x', 'y', 'return x+y')
    f = (x, y) => x+y
    

    相关文章

      网友评论

          本文标题:027进阶函数-02 函数的五种声明方式

          本文链接:https://www.haomeiwen.com/subject/chaurqtx.html