js函数总结

150 阅读2分钟

函数基本概念

函数:就是封装了一段可被重复调用执行的代码块,通过此代码块可以实现大量的代码的重复使用。

而函数的封装就是把一个或多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口

arguments的使用

作用:当我们不确定有多少个参数传递,可以用arguments来获取。

arguments对象里面存储了所有传递过来的实参,它们以伪数组的形式存在

例如:用来计算任意多个数最大值

function getMax(){
    var max=arguments[0]
    for(var i=0;i<arguments.length;i++){
        if(arguments[i]>max){
            max=arguments[i]
        }
    }
}
getMax(12,34,28,2547)

自调用函数

(function(){
    var num=100
    console.log(num)
})()

作用:形成局部作用域,避免全局污染

函数声明的两种方式

1.函数关键字

2.函数表达式

function关键字

function fn(){

}
fn();  //function声明前都可以调用

函数表达式(赋值式)

// var 变量名 = function(){};      var  声明后才能调用
var fun = function(aru){
    console.log('谢谢你,云顶猫咪');
    console.log(aru);
}
fun('eee');
//fun是变量名,不是函数名
// 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值,而函数表达式里面存的是函数;
//函数表达式也可以进行传递参数

变量使用规则:访问规则和赋值规则

访问规则:向上查找,到最外层仍然没有则报错。

赋值规则:基于作业域链,向上查找,如果最外层没有则把这个变量定义为全局变量,给他赋值。

从执行效率来看全局变量和局部变量

  • 全局变量只有浏览器关闭时才会销毁,比较占内存资源
  • 局部变量 当我们程序执行完毕就会销毁,比较节约内存资源
  • 没有var 声明的变量当全局变量

作用域链符合就近原则

预解析

我们js引擎运行分为两步: 预解析 代码执行

  • 预解析js引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面
  • 代码执行 按照代码书写的顺序从上往下执行
var num =10; //变量提升
function fn(){    // 函数提升
    console.log(num);
    var num = 20;  //变量提升
    console.log(num);
}
fn();
// 相当于以下代码
// var num;
// function fn(){
// 	var num;
// 	console.log(num);
// 	num = 20;
//	console.log(num);
// } 
// num = 10;
// fn();

递归函数

什么是递归函数?

在函数体中自身调用自身,这样的函数称为递归函数。 递归结束条件 后面的结果,由前面推导

//计算1+2+3+4+5=?
function diGui(n){
    //结束递归条件
    if(n==1){
        return 1
    }
    //找后面求的结果与前面关系
    return diGui(n-1)+n
}

document.write( 'sum',diGui(5))
//5    4    f(n-1)+n   n为最后一位