1.函数基础
1.1函数是可以执行的代码
1.2函数定义:
关键字:function
function 函数名(){程序}
1.3参数:
参与运算的变量
(1)形参:形式上参与运算的变量,无实际值,为实参占位
(2)实参:实际参与运算的值
1.4返回值:return
函数程序运行结束后的结果外部需要使用时,不能直接给与,需要通过return返回。
函数内部,return后的值就是返回值
函数执行后剩下的结果就是返回值
函数默认返回值是undefined
1.5函数名、函数体、函数加载
function fn(){
alert(1);
}
console.log(fn)==console.log(function fn(){
alert(1);
})
(2)函数加载问题
js加载时,只加载函数名,不加载函数体。如果想使用内部成员变量,需要调用函数。
1.6函数定义
(1)函数声明:
function f(a,b){
return a+b;}
console.log(f(3,4));
(2)函数表达式
var myfun=function(a,b){
return a+b;
}
console.log(myfun(6,7));
1.7变量和作用域
(1)全局变量
(2)局部变量
函数内部的变量,只有函数内部可以访问到
(3)隐式全局变量
function fn(){
var a=b=c=1;
}
b和c就是全局变量
function(){
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就不是全局变量
(4)变量声明提升(出现原因:预解析)
函数中:定义变量在使用变量之后
成员只提升变量名,不提升变量值,出现undefined。函数是所有内容提升。
console.log(aa);
var aa=1;
//结果是undefined。因为变量声明提升只提变量名,不提升变量值。上面和下面是等价的
var aa;console.log(aa);aa=1;
fn();
function fn(){
console.log(bb);
var bb=2;
}
结果是undefined;函数提升是整个提升,但是就近原则使用变量,内部变量提升,所以是undefined。
总结:
(1)函数不调用不执行
(2)函数名等于整个函数
(3)参数相当于局部变量
(4)就近原则使用变量
(5)两个平级的函数中的变量不会相互影响(可以使用相同的形参名)
2.函数高级
2.1 匿名函数
就是没有命名的函数,一般用在绑定事件中
function(){}
调用:(function(){alert("hello")});就是用()调用
2.2递归函数
递归是一种思想,类似于计数器,开闭原则
递归的实质就是函数自己调用自己
递归必须有跳出条件,否则是死循环
var i=1;
fn();
function fn(){
alert("从前有座山,山里有座庙");
i++;
alert(i);
if(i>3){
return;
}
fn();
alert("从前啊");
i++;
alert(i);
if (i<3){
fn();
}
}
2.3 回调函数
回调函数:函数作为参数进行传递和使用
fn(test);
function fn(demo){
demo();
}
function test(){
console.log('函数');
}
回调函数一般是用于定义一个规则来使用,规则的传递通过函数来实现。