一、函数的概念
函数:就是封装一段可被重复调用执行的代码块。通过代码块可以实现在需要的的重复使用,使用typeof检查一个函数对象时,会返回function
函数的封装是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口,简单理解:将很多衣服打包到一个行李箱,jQuery就是一个函数封装库,对外暴露一个顶级对象$
二、函数的使用
函数在使用时分为两步:声明函数和调用函数
声明函数(创建函数)三种方式
第一种方式 创建一个构造函数对象
我们在实际开发中很少使用构造函数来创建一个函数对象
可以将要封装的代码以字符串的形式传递给构造函数
封装到函数中的代码不会立即执行,函数中的代码会在函数调用的时候执行
var fun = new Function("console.log('hello 这是我的第一个函数')");
console.log(typeof fun);//function
fun();
第二种方式 使用函数声明来创建一个函数(常用)
function 函数名([形参1,形参2,形参3,形参4....形参n]){
执行语句.....
}
function fun2() {
console.log("这是我的第二个函数~~~");
alert("hahahaha");
document.write("wuwuwuwu");
}
第三种方式 使用函数表达式来创建一个函数 (匿名函数)
var 变量名=function([形参1,形参2,形参3,形参4....形参n]){
语句.....
}
注意:变量名不是函数名
var fun3 = function () {
console.log("我是匿名函数中的封装的代码");
}; //相当于赋值语句
fun3(); //调用函数
注意:
由于函数一般是为了实现某个功能才定义的,所以通常我们将函数名命名为动词,例如getsum
调用函数
调用函数语法:变量名/函数名()
当调用函数时,函数中封装的代码会按照顺序执行
三、函数的参数
形参:
形式上的参数,函数定义的时候,传递的参数,当前并不知道是什么,用来接收实参的,形参类似一个变量,声明了并未赋值,多个形参之间用逗号隔开
实参:
实际上的参数,函数调用的时候传递的参数,实参是传递给形参,相当于给形参赋值
参数的作用:
在函数内部某些值不能固定的时候,我们可以通过参数在调用函数时传递不同的值进去
语法结构:
function 函数名(形参1,形参2····形参n){//声明函数的小括号里的是形参(形式上的参数)
执行语句.....
}
函数名(实参1,实参2····)//在函数调用的小括号里面是实参(实际参数)
形参和实参匹配的问题
- 如果形参和实参的个数一致,则正常输出结果
- 如果实参的个数多于形参的个数,会取形参的个数
- 如果实参的个数小于形参的个数,多余的形参默认定义为undefined
- 调用函数时,解析器不会检查实参的类型,所以要注意,是否有可能会接收到非法的参数,函数的实参可以是任意的数据类型
建议形参和实参个数一致
实参可以是任何类型
——可以是一个对象,当我们的参数过多时,可以将参数封装到一个对象中,然后通过对象传递
——实参可以是一个对象,也可以是一个函数
四、函数的返回值return
1、返回值语法结构
function 函数名(){
return 需要返回的结果
}
函数名()
2、返回值注意事项
- 函数只是实现某种功能,最终的结果需要返回给函数的调用者(谁调用函数,函数实现结果功能反馈给谁),函数名()=return 后面的结果,通过return实现的;可以定义一个变量,让return来接受该结果
- 在函数中,return之后的语句就都不会执行,有终止函数的作用
- return只能返回一个值,多个值,返回的是最后一个值。如果有需求返回多个值,可以将多个值放入数组或者对象里
- return后可以跟任意类型的值
- 如果return后不跟任何值,就相当于返回一个undefined
- 如果函数中不写return,则也会返回undefined
3、返回值类型
返回值可以是任意的数据类型, 也可以是一个对象 ,函数
4、break、continue、return的区别
- break:结束当前的循环体(for、while)
- continue:跳出本次循环,继续执行下次循环(for、while)
- return:结束当前循环体,return后的语句不会执行, return函数的结果
五、arguments的使用
在调用函数时,浏览器每次都会传递两个隐含的参数:
1:函数的上下文对象 this
2:封装实参的对象 arguments
当我们不确定有多少个参数传递的时候,可以使用arguments来获取,在JS中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。
(1)、arguments 是一个类(伪)数组对象
它可以通过索引来操作数据,通过arguments.length可以获取实参的长度获取长度
伪数组并不是真正意义上的数组
- 具有数组的length属性
- 它没有真正数组的一些方法
- 按照索引的顺序进行存储的
(2)、在调用函数时,我们所传递的实参都会在arguments中保存
(3)、我们即使不定义形参,也可以通过grguments来使用实参,只不过比较麻烦
arguments[0]表示第一个实参
arguments[1]表示第二个实参
(4)、arguments有个属性叫callee,
这个属性对应一个函数对象,就是当前正在指向函数的对象
六、函数方法call()、apply()、bind()
这两个方法都是函数对象的方法,需要通过函数对象来调用
-当对函数调用call()和apply()方法时,都会调用函数执行
-在调用call和apply()可以将一个对象指定为第一个参数, 此时这个对象将会成为函数执行的this
-call()方法可以将实参在对象之后一个个传递
apply()方法需要将实参封装到一个数组中统一传递
总结this的情况
1.以函数形式调用时,this永远是window
2.以方法的形式调用时,this是调用方法的对象
3.以构造函数的形式调用时,this是新创建的那个实例对象
4.使用call和apply调用时,this是指定的那个对象,如果不写第一参数,默认是window
七、函数嵌套函数
每个函数都是独立的代码块,用于完成特殊任务,因此经常会用到函数相互调用的情况
一般情况下,一个函数只做一件事
八、立即执行函数
//第一种写法:常用
//外面的()是把整个函数当作函数名,后面的()是调用函数的意思
(function () {
console.log(111);
})();
// console.log(1111);
//第二种写法
(
function () {
console.log(2222);
}()
)
标签:return,函数,形参,对象,argument,调用函数,实参
From: https://blog.csdn.net/m0_63346819/article/details/143700214