1,函数基础
1.1,函数声明
关键词function
:声明一个函数,
格式:function 函数名(参数列表){函数体}
function people(name, age, sex) {
console.log('我是' + name + ',今年'+ age + '了,我是' + sex )
};
在js函数中声明的变量,会成为函数的局部变量。局部变量只能在函数内访问。
局部变量在函数开始时创建,在函数完成时被删除。
function sayHi() { // (1) 创建
let name = 'long'
alert( "Hello" );
}
let func = sayHi; // (2) 复制
func(); // Hello // (3) 运行复制的值(正常运行)!
sayHi(); // Hello
解释一下上段代码发生的细节:
(1) 行声明创建了函数,并把它放入到变量 sayHi。
(2) 行将 sayHi 复制到了变量 func。请注意:sayHi 后面没有括号。如果有括号,func = sayHi() 会把 sayHi() 的调用结果写进func,而不是 sayHi 函数 本身
。
现在函数可以通过 sayHi() 和 func() 两种方式进行调用。
1.2,函数调用
函数调用格式为:函数名(实参列表)。
实参:函数调用时,传递的参数。
people('king',24,'帅锅'); //"我是king,今年24了,我是帅锅"
people('大妹子',24,'美美'); // "我是大妹子,今年24了,我是美美"
调用函数时,函数的函数体代码会被执行,函数中的参数值就是本次调用所传递进去的。
函数调用本身也是一个表达式,表达式的值就是函数的返回值。
1.3,函数返回
当js执行到达 return 语句,函数将停止执行。
如果函数被某条语句调用,js将在调用语句之后“返回”执行代码。
function people(name, age, sex) {
console.log(name)
console.log(age)
return 123;
console.log(sex)
}
let men = people("小明", 30, true);
console.log(men)
/* 控制台输出
* 小明
* 30
* 123
*/
作用域:每一个参数都有一个作用范围,超过范围就失效,这个范围就叫作用域
。
2,函数防抖
对于调用频率很高或频繁调用的函数,有时只希望其第一次或最后一次执行,那么可以使用定时器对函数进行改造,这个过程叫做函数防抖。
简单来说:一段时间内重复触发,只执行开始一次和结尾一次,或者只执行结尾那次。
函数防抖需要一个防抖时间,使用settimeout定时器记录函数的调用时间,当函数再次调用时,重置定时器时间(取消上次的定时器,然后开启一个新的定时器)。
3,函数节流
对于频繁调用或调用频率很高的函数,希望其按照指定的频率(一般小于本身频率)进行调用,则可以使用定时器对函数进行改造,这个过程叫做函数节流。