6.函数

函数

使用 function 关键字来声明, 后跟一组参数以及函数体

function name(params) {
    statement
}

通过 return 语句指定函数返回值

function add(num1, num2){
    return num1 + num2
}
var result = add(1, 2)  // 3

return 语句后的代码不会执行

function add(num1, num2){
    return num1 + num2
    alert("not execute") // 不会执行
}
var result = add(1, 2)  // 3

函数默认返回值 undefined

function add(num1, num2){
    alert(num1 + num2)
}
var result = add(1, 2)  // undefined

// 或者return语句不带任何返回值,也返回undefined

function add(num1, num2){
    return
    alert("not execute") // 不会执行
}
var result = add(1, 2)  // undefined

理解参数

函数参数不是必须的,也可以传入跟定义不一致的参数。实际上函数内部通过 arguments 对象来访问参数数组(只是与数组类似,不是 Array 的实例),通过使用方括号语法 arguments[i]获取传递给函数的每一个参数。

// 命名的参数只提供便利,不是必须的
function sayHi(){
    alert('Hello' + arguments[0] + arguments[1])
}
sayHi('liuchang','i love you')

通过 length 属性来判断传入参数的个数。

function howManyArgs(){
    console.log(arguments.length)
}
howManyArgs(1,2) // 2
howManyArgs(1) // 1
howManyArgs() // 0

利用 length 属性可以模拟函数重载

function doAdd(){
    if(arguments.length == 0){
        return
    }else if(arguments.length == 1){
        return arguments[0]
    }else if(arguments.length == 2){
        return arguments[0] + arguments[1]
    }else{
        return "请输入最多两个参数"
    }
}
doAdd() // undefined
doAdd(1) // 1
doAdd(1, 4) // 5
doAdd(1, 4, 6) // "请输入最多两个参数"

arguments 的值永远和对应的命名参数保持同步(他们的内存空间是独立的,但是值会同步)

function doAdd(num1, num2){
    arguments[1] = 10
    return arguments[0] + num2
}
doAdd(1, 3) // 11

// 这里我发现了一个例外,如果没有传递第二个参数,arguments[1]的值和num2是不同步的。
function doAdd(num1, num2){
    arguments[1] = 10
    console.log(num1, arguments[0], num2, arguments[1])
}
doAdd(1) // 1 1 undefined 10

没有传递值的命名参数将自动赋予 undefined 值

function doAdd(num1, num2){
    console.log(num1, num2)
}
doAdd(1) // 1 undefined

定义两个名称相同的函数,则改名字属于后定义的函数

function addNumber(num){
    return num + 100
}
function addNumber(num){
    return num + 200
}
addNumber(100) // 300
    原文作者:ChangLau
    原文地址: https://www.jianshu.com/p/a6c3e69d7b31
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞