定义
定义一段代码,可以反复调用执行。
函数的声明
关键字function 函数名是自定义的
function 函数名(){
...
}
字面量的形式
把匿名的函数存在一个变量中,变量名就是函数名。
let variable = function(){
...
}
函数的调用
函数都是通过 函数名() 调用执行函数
函数的参数
函数存在参数:分为实参和形参
形参:函数声明时传入的变量称为形参,形参相当于函数内声明的变量,可以在函数体中直接使用
实参:函数调用时传入的变量成为实参,实参用来给形参赋值
两者的关系:形参和实参是一一对应的
形参多 实参少:多余的变量默认值是undefined
形参少 实参多:多余的变量会被自动忽略
// a b 就是形参
function func(a, b){
}
// 1 2 就是实参
fun(1,2)
函数的返回值
函数可以指定返回值,通过return关键字进行返回,如果没有明确指定函数的返回值,则默认的返回值是undefined
return语句的作用:1.作为函数的返回值;2.终止代码的执行,return语句后面的代码将不再执行
function func(){
...
return value;
}
函数对象
属性length
函数对象的属性length获取的是形参的个数
function func(a, b){}
// 获取的是形参的个数
let len = func.length; // 2
参数arguments
arguments是函数参数对象,是伪数组,该对象存在一个属性length;获取的是实参的个数
// arguments 只存在于函数体内部
function func(a, b){
// 获取的是实参的个数
let len = arguments.length;
// 通过索引值 获取具体的实参
let num = arguments[index];
}
func(1,2)
方法
函数对象存在三个方法:call() apply() bind()
call(obj, args1, args2, ...): call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。
参数解析: obj:是一个对象; 修改this指向, 如果不需要修改this指向,则传入null; 后边是参数列表: 参数是一一罗列的
apply(obj, [args1, args2, ...]): apply() 方法调用一个具有给定this值的函数,以及以一个数组(或类数组对象)的形式提供的参数。
参数解析: obj:是一个对象; 修改this指向, 如果不需要修改this指向,则传入null; 第二个参数: 是一个参数列表,以数组的形式传递
bind(obj, args1, args2, ...): bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
参数解析: obj:是一个对象; 修改this指向, 如果不需要修改this指向,则传入null; 后边是参数列表: 参数是一一罗列的
区别: call() 和 apply() 调用执行原函数, bind() 返回一个新函数(和原函数一样)
function print(){}
// 调用执行函数
print.call()
print.apply()
// 得到新函数
let f = print.bind()
f()