函数
2019-12-20 本文已影响0人
Red_b759
一.函数
- 把完成特定功能的一段代码抽象出来,使之成为程序中的一个独立实体,起个名字(函数名)。
- 可以在同一个程序或其他程序中多次重复使用(通过函数名调用)。
- 内置函数,自定义函数
- JS函数没有重载一说,只以函数名区分,参数的个数不同并不会影响函数,调用的时候只会执行定义的时候最后一个函数的语句。
function 函数名(参数1名字,参数2名字,……)//函数可以没有形参
{
语句
[return 返回值;]//函数可以没有返回值
}
二.封装函数(初级基本步骤)
- 写完成特定功能的代码(老老实实的把基本代码写一遍)
- 把完成特定功能的代码抽离出来 放到函数中 给函数起一个名字
- 把函数中的可变参数提取为形式参数
- 确定函数的返回值 return
- 调用函数
三.关于函数的返回值return的问题
函数的return值可以有(有的话就返回 既定的值),也可以没有(默认返回undefined);
- 可以直接在页面看到效果的(将结果直接输出到页面上) 不设置return 值也可以
- 希望函数可以返回一个新的结果(人为规定函数的返回值)
四.函数的特点
- 每次调用函数 会重复执行函数的上下文(从函数中的第一一直执行到最后一行)
- 如果存在形式参数,函数每次执行过程中 会用 形式参数 接收对应的 实际参数
形式参数(函数封装过程中的假设性参数 如果你传了一个值 这个值在函数中怎么运行)
实际参数(函数在调用过程中真正传入的实际值)
五.函数的作用
- 使程序变得更简短而清晰
- 有利于程序维护
- 可以提高程序开发的效率
- 提高了代码的重用性(复用性)
六.递归
简单来说就是自己调用自己,递归需要设置结束条件(递归函数的函数体内一定需要有一个分支是不调用自身的,否则,会无休止地调用下去,引起栈溢出。)
例子:以下为n!的递归;
function fn(n){
if(n === 1){ //必须要的结束条件,不然就是死循环了
return 1;
}
return n * fn(n-1);
}
fn(3); //6
六.全局变量和局部变量
1.局部变量
局部变量就是定义在函数内部的变量,这个变量只能在函数内部使用,即作用域范围只是函数内部,另外,形参也是局部变量。
2.全局变量
全局变量就是定义在函数外部的变量,通过关键词(var,let,const)声明的,这个变量在任何函数中都有效,即作用域范围是当前文件的任何地方。
3.作用域
就是起作用的范围。或者说有效范围。
七.全局代码处理过程
- 语法解析
语法分析会在代码执行前对代码进行通篇检查,以排除一些低级错误 - 预编译
预编译发生在代码执行的前一刻(分作用域)
2.1 全局作用域的预编译
a. 变量提升 (在代码执行的前一刻,把当前作用域中所有的全局变量的声明,提升到所有代码的最前方 没有通过关键词声明的全局变量 没有变量提升)
b. 确定函数体(命名函数)
2.2 局部作用域的预编译
a. 变量提升 (在代码执行的前一刻,把当前作用域中所有的全局变量的声明,提升到所有代码的最前方 在函数中没有通过关键词声明的变量也是全局变量)
b. 确定函数体(命名函数)
c. 把实际参数赋值给形式参数 - 解释执行