目录
1.创建函数方法
1.1有函数名称的叫具名函数
1.2 匿名函数,没有函数名称 (无法调用 一般不用)
1.3函数表达式的方式创建,把一个函数赋值给变量
2.函数参数
2.1 形参和实参
2.2 arguments 参数
3.函数的小知识
3.1 函数的重复声明 后声明的函数覆盖前面声明的函数
3.2 函数提升,function创建的函数在js编译的时候提升到代码顶部。(一般不使用)
4.回调函数 (特殊参数) --重点
4.1回调函数:把一个函数作为实参传递给另外一个函数
5.return 返回值 函数
5.1 return:把函数内部的值返回到函数外部
5.2 函数运行的结束标志,return后面的代码不会执行
6、函数的属性和方法
6.1 返回函数的名称,查看原始名称
6.2 length 返回函数参数的个数
6.3 toString()函数转为字符串
7.函数全局变量和局部变量
7.1 函数外部创建的就是全局变量,可以在JS文件的任意位置使用
7.2 函数内部创建的变量就是局部变量,只能在函数内部使用
7.3 可以用return把函数内部的变量返回到函数外部
7.4 ( )小括号可以立即运行函数
7.5 闭包:函数内部返回一个函数
7.6 递归函数 :函数调用自身函数
1.创建函数方法
1.1有函数名称的叫具名函数
function 函数名称(){ }; 调用函数: 函数名();
function fnl( ){
var a = 2;
var b = 5;
console.log(a * b);
}
//调用函数
fnl();
1.2 匿名函数,没有函数名称 (无法调用 一般不用)
基本语法:(函数(){ })
1.3函数表达式的方式创建,把一个函数赋值给变量
1.4 用Function(argument,....,body)构造函数创建函数。
argument是函数的参数,body是函数的主体(函数代码区块)。一般用于将字符串转为JS 代码运行
//用function(argument,....,body)构造函数创建函数
var f3 = new Function ("console.log('f3')");
//输出f3
console.log(f3); //输出
//判断f3函数的类型
console.log (typeof f3) //输出function
// 读取f3 将字符串转为JS代码执行
f3();
上述代码输出的结果
2.函数参数
2.1 形参和实参
函数的小括号里面创建的变量叫参数,也叫形参。形参的数量没有限制,多个参数用逗号分割。 形参默认值是undefined
实参:调用给函数传的值 | 基本语法:function 函数名称(形参1,形参2,形参3......){ console.log(); } 函数名称(实参1,实参2,实参3......)
function fnl(a,b,c){
console.log (a + b + c);
}
//如果只上传两个实参值 则输出NAN 因为 10 + 20 + undefiend = NAN
fnl(10,20);
给形参设置默认值,则可以避免undefined / NaN出现
2.2 arguments 参数
arguments 的基本介绍: 1.只能在函数内部被访问 2.arguments是一个伪数组(有下标索引,可以存放多个值,但是他里面没有数组的方法) 3.arguments 里面存的是函数的实际参数传递过来的值 4.arguments和函数的形参是对应的,有一个值更改了,对应的也要更改
arguments[ ] 函数参数的数组 Arguments 一个函数的参数和其他属性 Arguments.callee 当前正在运行的函数 Arguments.length 传递给函数的参数的个数
function test(num1 ,num2 ){
console.log(arguments); //输出伪数组
console.log(arguments[1]); //可以像数组一样利用下标读取
num1 = 100 ;
console.log(num1);//100
arguments[1] = 200;
console.log(num2) ; //200
arguments[2] = 300;
console.log(arguments[2]); //300
}
test(10,20);
上述代码输出的结果
arguments 基本用法:
如果函数中有实参但是没有形参 1)则需要函数中arguments参数来获取实参的值(获取到的是一个伪数组) 2)可以用数组的遍历读取函数中的值
//f3函数有实参但是没有形参
function f3 (){
console.log(arguments);//用函数自带的参数arguments 来获取函数实参
}
f3(1,2,"a");
3.函数的小知识
3.1 函数的重复声明 后声明的函数覆盖前面声明的函数
3.2 函数提升,function创建的函数在js编译的时候提升到代码顶部。(一般不使用)
1)由于有函数提升,所以在函数创建前面 调用函数 不会报错 (仅适用于function创建)
//在函数创建前面读取
fn1(); // 读取为 aaa
//创建函数
function fn1 ( ){
console.log("aaa")
}
2) 如果函数名和变量名相同,函数会覆盖变量
//创建函数
function fn1 ( ){
console.log("aaa")
}
//变量与函数重名
var fn1 ;
console.log(fn1); //输出函数fn1
4.回调函数 (特殊参数) --重点
4.1回调函数:把一个函数作为实参传递给另外一个函数
//创建一个函数 参数为函数callback
function fn1(callback){
callback(); //读取函数cellback ----> xxxxxx
}
//写法1:调用函数fn1 回传一个匿名函数
// fn1(function(){console.log("xxxxxx")});
/* ================================================= */
//写法2:创建一个变量函数
var fnx = function(){
console.log("aaaaaaa");
}
//调用fn1 把fnx函数作为参数传递到fn1
fn1(fnx);
5.return 返回值 函数
5.1 return:把函数内部的值返回到函数外部
如果函数没有return关键词,默认返回函数外部的undefined 返回值给调用函数的变量
function f4(){
var a = 10;
var b = 20;
var c = a*b ;
//执行函数 返回C
return c ;
}
/*
没有 return 默认返回undefined
var res =f4();
console.log (res); //--> undefined
*/
//给函数值定义一个变量res
var res = f4();
//f4()函数运行会把return后面的结果返回到函数外面
//-----> (把C返回到函数外面,相当于f4()运行后就得到c,再把c赋值给res变量)
console.log(res); // --> 200
5.2 函数运行的结束标志,return后面的代码不会执行
function f4(){
var a = 10;
var b = 20;
var c = a*b ;
//执行函数 返回C
return c ;
console.log("aaaa"); //跟在return后面 代码不会执行
}
var res = f4( );
console.log(res); // ---> 只输出200
6、函数的属性和方法
6.1 返回函数的名称,查看原始名称
function f2(){}
function f1(){ }
//把f1赋值给f2
var f2 = f1;
console.log(f2.name); //--> f1 (看函数原始的名称)
var f3 = function test(){}
console.log(f3.name); //--> test
6.2 length 返回函数参数的个数
6.3 toString()函数转为字符串
7.函数全局变量和局部变量
7.1 函数外部创建的就是全局变量,可以在JS文件的任意位置使用
7.2 函数内部创建的变量就是局部变量,只能在函数内部使用
//全局变量
var a = 100;
//创建函数
function fn1 (){
console.log ("全局变量函数中输出 a:" + a); // a:100
var x = 50 ;
console.log ("局部变量函数中输出 x:" + x);//b:50
}
fn1();
console.log("全局变量函数外部也可以输出 :" + a);//a:100
console.log ("局部变量函数外输出会报错 x:" + x); //报错
如果局部变量和全局变量重名,则局部变量优先于全局
//全局变量
var x = 100;
//创建函数
function fn1 (){
var x = 50 ;
console.log ("输出局部变量 x:" + x); // 50
}
fn1();
console.log ("输出全局变量x:" + x); // 100
如果在函数中修改了全局变量值,则外部也会输出修改过后的值
//全局变量
var x = 100;
//创建函数
function fn1 (){
x = 50 ;
console.log ("输出变量 x:" + x); // 50
}
fn1();
console.log ("输出变量x:" + x); // 50
7.3 可以用return把函数内部的变量返回到函数外部
//创建函数
function fn1 (){
x = 50 ;
console.log ("输出变量 x:" + x); // 50
return x ; //返回X的值到fn1
}
var test = fn1();
console.log ("函数内部变量x:" + test); // 50
7.4 ( )小括号可以立即运行函数
立即运行一个匿名函数
//注意匿名函数外面要加小括号
(function(a){
console.log ("我是一个匿名函数" , a );
})("a"); //这里的小括号可以立即运行匿名函数 ,里面也可以传参数
//---> 我是一个匿名函数,a
7.5 闭包:函数内部返回一个函数
作用:把函数内部的变量持久放在内存中
//实现局部变量的累加
function f7() {
var a = 0;
// return 返回一个函数
return function(){
a++;
console.log(a);
}
}
//调用f7函数拿到return返回的函数
//f7a 等于f7函数返回的匿名函数
var f7a = f7();
//调用f7a函数相当于是执行f7返回的匿名函数
f7a(); // 1 闭包作用 :函数内部的变量持久放在内存中
f7a(); // 2
f7a(); // 3
7.6 递归函数 :函数调用自身函数
function f7() {
var a = 0;
console.log(a);
f7() ;//函数内部调用自身
}
递归的三部曲: 1.创建一个函数,函数要写出需要的结果 2.递归函数必须要有一个结束递归的条件 3.递归函数是从最里层(最后一个函数,结束条件)开始计算
案例:计算5! (1*2*3*4*5)
思维分析图:
function countNum(num){
//第二步 递归函数需要一个结束条件
if (num === 1){
return 1; //return 值谁调用返回给谁
}
//第一步 创建 需要输出的结果
return num * countNum(num-1);
}
var res = countNum(5);
console.log(res);
好文阅读
发表评论