函数内置对象
函数的内置对象:arguments,保留了函数接收的所有实参,arguments以数组的方式存放所有接收的实参。
当不确定函数中接收到了多少个实参的时候,可以用arguments来获取实参。
function fn() {
console.log(arguments) // 输出结果:Arguments(3) [1, 2, 3, …]
console.log(arguments.length) // 输出结果:3
console.log(arguments[1]) // 输出结果:2
}
fn(1, 2, 3)
函数表达式
定义
函数表达式(匿名函数):将声明的函数赋给一个变量,然后由该变量完成函数的调用和参数传递
var 变量名 = function([参数]){
函数体
}
练习
找出一维数组的最大值
//寻找最大值的函数表达式
var getMax=function(arr){
var max=arr[0]
for(var i=0;i<arr.length;i++){
if(max<arr[i]){
max=arr[i]
}
}
return max
}
//调用函数
var arr=[11,23,45,31,10,87,33]
console.log("max="+getMax(arr))
变量的作用域
作用域的分类
(1)全局变量:在函数外部定义的变量(显式定义)或在函数内部不用var定义的变量(隐式定义),在浏览器页面关闭后才会销毁,比较占空间。
(2)局部变量:在函数体内部利用var关键字定义的变量。
(3)块级变量:ES6提供的let关键字声明的变量。
回调函数
定义
将一个函数作为参数传递给另一个函数,在另一个函数内对参数函数进行调用,参数函数就是回调函数。
练习
//定义函数
function fun(a,b){
return a+b
}
function cal(m,n,fn){
return fn(m,n)
//调用函数
var s=cal(2,3,fun){
console.log("s="+s)
运行结果:5
递归函数
定义
函数自己调用自己。
练习
计算n的阶乘。
//定义函数
function func(n){
if(n==1){
return 1
} //递归结束的条件
return n*func(n-1)
}
//函数调用
var n=parseInt(promopt("请输入一个整数:"))
console.log("n的阶乘为:"+func(n))
“闭包”函数**
定义
“闭包”指的是有权访问另一函数作用域内变量(局部变量)的函数。
主要用途:
(1)可以在函数外部读取函数内部的变量;
(2)可以让变量的值始终保持在内存中。(所以滥用会造成内存消耗,降低程序处理速度等问题)
练习
function fn(){
var times=0
var c=function(){
return ++times
}
return c
}
//调用函数
var count=fn() //count是闭包函数,访问fn()函数内部的变量(times变量),并且在第二次执行调用语句时,函数内部变量times不再初始化。(用途2)
console.log(count()) //1
console.log(count()) //2
console.log(count()) //3