js基础函数(下)(小白自用5)

保存对代码的热爱,并保存怀疑态度

入口 - 参数

  • 实参
  • 形参
  • 类型
  • 数量关系
    • 数量一致时:从左向右一一对应
    • 实参多:无法通过形参拿到多出来的实参,但是可以通过arguments拿到所有实参
    • 形参多:多出来的形参为undefined
function fn(a){   // 形参
    console.log(a);

}
fn(1)      //实参

一. arguments

  • 函数内部有一个隐藏对象,用来接收所有实参
  • 类数组(伪数组)
    • 具有的索引和长度的概念,但是不能使用数组的某些操作
  • 利用数组的索引和长度配合循环,获取arguments中保存的实参
    • 计算机中的索引从0开始
  • 应用场景:当函数的实参个数不确定时,可以使用arguments找到所有实参
function fn(a){   // 形参
   console.log(arguments);   //全部参数 ,得到时一个数组 ,要想取得每个值可以用循环遍历出来
    //if.html:57 Arguments(10) [1, 2, 3, 4, 5, 5, 6, 3, 4, 2]
    for(var i=0;i<arguments.length;i++){  //遍历的是arguments的长度
        console.log(arguments[i])         //取出每个值 
    }
}
fn(1,2,3,4,5,5,6,3,4,2)      //实参

二. 出口 - 返回值

  • 关键字:return
    • 语法:return 要返回的数据或变量
    • return,不仅可以返回数据,还会终止当前函数
    • 所以,一个函数,只能执行一次return
    • 一个return后只能跟一个数据
  • 返回值的应用场景:
    1. 用来处理数据的函数,需要有返回值,返回处理之后的数据
    2. 实现功能的函数,没有必要有返回值,但是可以写
  • 没有return的函数,会返回undefined
  • 可以返回所有类型的值
function fn(a){   // 形参
    console.log(arguments);   //全部参数 ,得到时一个数组 ,要想取得每个值可以用循环遍历出来
    //if.html:57 Arguments(10) [1, 2, 3, 4, 5, 5, 6, 3, 4, 2, callee: ƒ, Symbol(Symbol.iterator): ƒ]
    var j=[]   //用来保存arguments的值
    for(var i=0;i<arguments.length;i++){  //遍历的是arguments的长度
        j+=arguments[i]      //取出每个值 
    }
    return   j;
}
console.log(fn(1,2,3,4,5,5,6,3,4,2) )     //实参    返回到执行函数身上了,也就是这个

三、作用域

- 变量生效的区域
- 全局作用域,内的变量,叫全局变量
    - 不属于任何一个函数的区域
- 局部作用域,内的变量,叫局部变量
    - 某个函数内部的区域
- 局部作用域可以使用全局作用域的变量或数据(子可以拿父)
- 全局作用域不能使用局部作用域的变量或数据(父不能拿子)
- 全局变量的生命周期
    - 随着程序的启动被创建,程序完全结束后,才会被删除
    - 相对局部来说,比较占空间
- 局部变量的生命周期
    - 随着作用域的开启被创建,作用域的结束被删除
- 尽量少用全局
    - 可以利用匿名函数生成独立作用域,在匿名函数内再写其他功能
(function(){
    var i=0;   //匿名函数会立即执行
})()

五、js的编译和执行

  1. 提升
    • var声明的变量会自动提前到作用域开始的位置,执行
      • 原位赋值
    • function声明的函数,会整体提升到作用域开始的位置
      • 当前作用域只要定义了函数,无论位置,都能执行
    • 当var遇到function
      • 赋值式创建函数
      • var的变量和function的函数名重名
上一篇:js 函数中arguments的理解


下一篇:let和const的变量声明不在window对象上