js函数-构成

前言

  函数是一种封装,在任何语言中都是一个核心概念。在js中,函数是做为对象的子类型存在的。可以拥有自己的属性和方法,可以做为值进行传递,这两个特性让js拥有使用函数式编程的能力。

函数的声明

  字面量声明:就是使用function关键字后面跟上固定语法。

function fnName(option1,option2){
  // 这里是代码块
}

  作为函数表达式:只要函数出现的地方,不是函数本身的function 关键字打头的,都叫函数表达式。

// 作为函数表达式的函数
var fn = function(){}

函数的构成

  形参:函数定义的时候在小括号里面定义的参数列表。用来接收实际参数。

  实参:实际调用函数的时候传入的参数。

  return:结束函数执行的同时把后面 跟着的值返回出去,作为函数的产出。是可选的。不显示返回参数的话执行后会默认返回undefined。

  函数的执行:函数表达式后跟一对圆括号()就会执行。

  作为对象的函数:js中的函数作为对象类型是可以拥有自己的属性的。

// 一个做作的加法函数
function add(a,b){
    return add.calculate();
}
// 为作为对象的函数定义一个calculate属性 这个属性的值指向一个匿名的function。
add.calculate = function(){
    let num = 0;
    Array.prototype.map.call(this.arguments,function(item){
        num += item;
    })
    return num;
}
console.log(add(1,3)); // 4

函数的两个属性

  js中函数的形参和实际运行时传入的实参个数可以是不对等的。默认的从左到右一一对应,多传或少传也不会报错的。

  arguments:可以在函数体内通过函数名访问argument获得函数运行时的实参列表。

  length:可以获取函数定义时,指定的形参个数。

  使用arguments定义一个重载的函数(根据不同实参个数做不同操作,jq的重载从概念上是这么干的)

function getSum(){
    // 获取实参列表
    var arg = getSum.arguments;
    // 没有参数就直接返回 -1
    if(arg.length === 0){return -1}
    // 只有一个参数就直接返回这个参数
    if(arg.length === 1){
        return arg[0];
    }
    var sum = 0;
    Array.prototype.map.call(arg,function(item){
        // item就是实参
        sum += item;
    })
    return sum;
}

 

  

posted @ 2019-06-01 19:51  找个地方随便坐  阅读(500)  评论(0编辑  收藏  举报