JS基础加强三_函数
来源:互联网 发布:淘宝怎么装修首页 编辑:程序博客网 时间:2024/05/19 06:51
函数基础
1. 函数概念
1.1 什么是函数
函数就是可以重复执行的代码块
- 为什么要用函数
因为一部分代码使用次数可能胡很多次,所以封装起来,需要的时候调用就可以了
1.2 函数定义三种方法
关键字function, function 函数名( ) { 程序 }
//第一种function fn1(){console.log("我是第一种定义方法!");}//第二种(匿名函数)var fn2 = function (){console.log("我是第二种定义方法!");}//第三种var fn3 = new Function("console.log('我是第三种定义方法!')");
1.3 参数
- 形参
形式上参与运算的变量,无实际值,为实参占位置,就像一个躯壳一样.(可以理解为函数的内部变量外部无法访问) - 实参
实际参与运算的变量,形参为他占位置,真实参与运算的变量.
1.4 返回值
有return函数就有值;没有return函数就没值;
函数程序运行后的结果外部需要使用的时候,我们不能直接给与,需要通过return 返回,
总结:函数内部,return 后面的值就是返回值
作用: 函数执行后剩下结果就是返回值
函数执行完毕, 会不会留下点什么,取决与有没有返回值
var temp = 函数名( ) = (功能)+ 该函数的返回值
1.5 返回值注意点
- 如果函数没有显示的使用return 语句,那么函数有默认的返回值:undefined
- 如果函数使用return语句,那么跟在return后面的值,就成了函数的返回值
- 如果函数使用return语句,但是return后面没有任何值,那么函数的返回值也是:undefined
- 函数使用return 语句,这个函数会在执行完return语句之后停止并立即退出,也就是说return后面的所有其他代码都不会在执行
2. 函数的运用
2.1 函数名、函数体、和函数加载问题
- 函数名是什么
函数名,就等于整个函数。
执行函数,就等于函数的功能+返回值;
function fn(){alert(1)};console.log(fn) == console.log(function fn(){alert(1)});
- 函数表达式
var myFun = function (a,b){ return a + b; } console.log(myFun(6,7));
2.2 变量和作用域(函数中的变量需要 函数执行后才能使用)
函数加载的时候,只加载函数名,不加载函数体
- 全局变量(成员变量)
哪里都可以访问到的变量,进入script立即定义的变量和没有var的变量 - 局部变量
函数内部的变量,只有函数内部可以访问到,函数内部用var定义的变量的形参 - 全部变量和局部变量区别
- ①. 定义的位置不同
成员变量定义在类中
局部变量定义在方法中以及语句里 - ②. 在内存中的位置不同
成员变量存储在堆内存的对象中
局部变量存储在栈内存的方法中 - ③. 生命周期不同
成员变量随着对象的出现而出现看,随着对象的消失而消失
局部变量随着方法的运行而出现,随着方法的弹栈而消失 - ④. 初始化不同
成员变量因为在堆内存中,所有默认初始化值
局部变量没有默认初始化值,必须初始化后才可以使用
- ①. 定义的位置不同
2.3 隐式全局变量
隐式全局变量就是隐藏的全局变量不好被发现。function fn(){var a = b = c = 1; // b和c就是隐式全局变量}注意:function fn(){var a = b = c = 1; // b和c就是隐式全局变量(等号)var a = 1; b = 2; c = 3; // b和c就是隐式全局变量(分号)var a = 1 , b = 2 , c = 3; // b和c就不是隐式全局变量(逗号)}
2.4 变量声明提升 (出现原因:预解析)
预解析:js的解析器在页面加载的时候,首先检查页面上的语法错误。把变量声明提升起来。
函数中,定义变量在使用变量之后。
值提升变量名,不提升变量值,容易出现undefined。计算后形成NaN。而用function直接定义的方法是整体提升。
function fn(){// var aaa;console.log(aaa);var aaa = 1;}
提前看一眼这个习惯叫什么呢? 预解析!
变量声明提升:在预解析的时候,成员变量和函数,被提升到最高位置,方便其他程序访问。
变量声明提升特点:成员变量只提升变量名,不提升变量值。但是,函数是所有内容全部提升。(function直接定义的)
函数范围内照样会出现变量声明提升
什么情况容易出现变量声明提升:使用变量在定义变量之前
3. 函数高级
3.1 函数小知识
- 函数不调用不执行
- 函数名就等于(整个函数)
- 加载函数的时候,只加载函数名,不加载函数体
- 参数相当于局部变量
- 就近原则使用变量
- 两个平级的函数中的变量不会相互影响(可以使用同样的形参名)
3.2 匿名函数
定义:匿名函数就是没有名字的函数。
作用:
1. 不需要定义函数名的时候。(群众演员没必要起名,百万雄师下江南)
2. 书写起来更简便。
匿名函数的调用有三种方法:
- 直接调用或自调用。(function(){alert(1)})()
- 事件绑定。
- 定时器。
3.3 函数是一种类型
定义:函数也是一种数类型,但是,归根结底还属于object
3.4 递归
定义:递归是一种思想:类似于我们的计数器,开闭原则
递归的实质就是函数自己调用自己
递归注意点:递归必须有跳出条件,否则是死循环
案例讲解:用递归求1+100的和alert(getSum(100));function getSum(n){ //跳出条件 if(n<1){ return 0; } return n+getSum(n-1);}
3.5 回调函数
定义:函数作为参数进行传递和使用
执行函数就等于:函数名+(); 整个函数+();
fn (test);function fn(demo){ demo( );}function test(){ console.log("我是被测试的函数!");}
什么情况下,使用回调函数:
- 回调函数一般是 用于定义一个规则来使用的,规则的传递只能通过函数实现,通过变量无法达成,所以我们需要传递规则的时候必须使用回调函数
- JS基础加强三_函数
- 黑马程序员_基础加强三
- JS基础加强一_变量
- JS基础加强二_数组简介
- JS基础加强四_面向对象
- JS基础加强五_数组操作
- JAVA基础加强_高新技术_收获三
- JS基础加强部分(三)
- Java基础加强<三>_类加载器、代理
- Java基础加强 三
- JS基础加强部分
- js基础加强
- 黑马程序员_基础加强
- 基础加强_注解Annotation
- 黑马程序员_基础加强
- java基础加强_反射
- JAVA基础加强_注解
- ava基础加强_泛型
- Leetcode 51. N-Queens (Hard) (cpp)
- JS基础知识三
- Newtonsoft.Json(Json.Net)学习笔记
- JS基础加强一_变量
- JS基础加强二_数组简介
- JS基础加强三_函数
- JS基础加强四_面向对象
- JS基础加强五_数组操作
- JS基础_DOM属性和操作
- JS基础_BOM属性
- Leetcode 52. N-Queens II (Hard) (cpp)
- java中volatile关键字的含义
- Dagger2的使用(0):
- STL拾遗之map操作