三、函数
声明:函数属于ECMAScript语法中的一项。但是因为它实在是太过于重要,所以单独讲。
3.1 什么叫函数
我们现在刚刚接触函数,暂且把函数理解为一个代码容器。用于装代码的。
3.2 函数的定义
注:定义了一个函数,该函数不会执行 需要调用才会执行
- 函数声明
- 函数表达式
-
3.2.1 函数声明
语法: function 函数名 () {}
// 定义函数
function fun() {
alert(10)
}
3.2.2 函数表达式
语法: var 变量名 = function() {}
// 定义函数
var fun1 = function() {
alert(10)
}
3.2.3 构造函数式(了解)
语法: var 变量名 = new Function(参数1,参数2,参数3,…函数体)
// 定义函数
var fun2 = new Function('console.log(10)')
3.3 函数的调用
调用非常简单,通过 函数名() 的方式进行调用即可
function fun() {
console.log(111)
}
fun();
IIFE调用: 立即执行函数
(function () {
console.log(111)
})();
3.4 函数的作用
复用代码
- 封装代码
3.5 函数的参数
函数是一段代码的封装。
当函数执行的时候,函数体内的代码会执行。
此时,我们可以传递一些数据参与运算。这个就是函数的参数。
函数的参数分为实参和形参。
实参:函数调用的时候真实传递进去的数据,叫做实际参数,简称实参。
形参:函数定义的时候写在形参列表中的变量,叫做形式参数,简称形参。
形参与实参的对应关系: 按照顺序,一一对应。函数形参跟实参个数不匹配问题
| 参数个数 | 说明 | | —- | —- | | 实参个数等于形参个数 | 输出正确结果 | | 实参个数小于形参个数 | 只取到形参的个数 | | 实参个数小于形参个数 | 多的形参定义为undefined,结果为NaN |
3.6 函数的返回值(return)
函数体内有一个专属的关键字 return
作用
- 是向函数的调用处返回一个值
- 终止函数的执行
- 只能返回一个值
function qiuhe(a, b) {
var result = a + b;
return result;
}
var he = qiuhe(10, 20);
// he => 30
3.7 arguments
arguments是函数中的一个内置对象
只能在函数里面使用
一个函数对应一个arguments
它里面装的是所有传递进来的实参
它长得非常像数组 但是因为它没有数组的方法 所以我们只能说它是类数组\伪数组function sum() {
var sum = 0;
// arguments.push(1) // 报错:arguments.push is not a function
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i]
}
return sum;
}
3.8 递归
定义:函数自己调用自己
求斐波那契数列
function fibonacci(num) {
if (num === 1 || num === 2) {
return 1;
}
return fibonacci(num - 1) + fibonacci(num - 2)
}
阶乘
function jc(num) {
if (num === 1) {
return 1;
}
return num * jc(num - 1);
}
3.9 this
this是函数内的一个对象,它表示’上下文’
定义一个函数
function demo() {
console.log(this);
}
this只能在函数调用的时候确定
在事件函数中,this指向绑定事件的元素
function demo() {
console.log(this);
}
document.onclick = demo; // 当点击时 this指向document
当函数自己调用的时候,this指向window(非严格模式下)
function demo() {
console.log(this);
}
demo(); // window
当函数作为对象的方法调用的时候,指向调用的对象
var obj = {
name: "小明"
}
obj.fun = demo;
obj.fun(); // {name: "小明", ...}
setInterval中
function demo() {
console.log(this);
}
setInterval(demo, 1000); // window
总结:函数中的this遵循两条规则 1 谁调用指向谁 2 调用者不明确 指向window