目录
基础
含义:函数是专门用于封装代码的,函数是一段可以随时被反复执行的代码块
格式:function 函数名称(形参列表){
被封装的代码;
}
例:function getSum(a,b){
let sum = a + b;
return sum;
}
注意点:①函数没有通过return明确返回值,默认返回undefined
②调用函数时传入的实参的个数和形参的个数可以不相同
例:function getSum(a,b){
let sum = a + b;
return sum;
}
getSum(10,15,20); // 25
③JavaScript中的函数和数组一样,都是引用数据类型(对象类型),既然是一种数据类型,所以也可以保存到一个变量中
例:let say = function(){
console.log("Hello world!");
}
say(); // Hello world!
arguments
作用:保存所有传递给函数的实参
例:log 函数可以接受1个或多个参数
注意点:每个函数都有一个arguments,它其实是一个伪数组arguments[];
扩展运算符
格式:...
-
扩展运算符写在等号左边,将剩余数据打包到另一个新的数组中
注意点:只能写在最后
例:let [a,...b] = [1,2,3]; // a = 1 , b = [2,3]
-
扩展运算符写在等号右边,将数组中的数据解开
例:let arr1 = [1,3,5];
let arr2 = [2,4,6];
let arr = [...arr1,...arr2]; // let arr = [1,3,5,2,4,6];
-
函数的形参列表中的扩展运算符
作用:将传递给函数的实参打包到一个数组中(与arguments相似)
例:function getSum(...values){
conlose.log(values);
}
getSum(10,20,30); // [10,20,30]
形参默认值
-
在形参后边通过 = 指定默认值,未人为指定默认值则默认为undefined
例:
function getSum(a = "666",b = "999"){
conlose.log(a,b);
}
getSum(); // 666 999
getSum(123,456); // 123 456
getSum(222,"a"); // 222 "a"
-
默认值还可从其他函数中获取
例:
function getSum(a = "666",b = getDefault()){
conlose.log(a,b);
}
function getDefault(){
return "默认值x"
}
getSum(); // 666 默认值x
匿名函数
格式:function(){
封装的代码;
}
应用场景 :
-
作为其他函数的参数
例:function test(fn){
fn();
}
test(function()){
console.log("Hello world!");
}
-
作为其他函数的返回值
例:function test(){
return function(){
console.log("Hello world!");
}
}
let fn = test();
fn();
-
作为立即执行的函数
(function (){
console.log("Hello world!");
})(); // 如果想要匿名函数立即执行,必须使用()将函数的定义包裹起来
注意点:匿名函数不能只定义不使用
箭头函数
作用:简化定义函数的代码
格式:let 函数名称 = (形参列表) => {
封装的代码;
}
注意点:
①如果只有一个形参,那么()可以省略,只写一个形参即可
② 如果{}中只有一句代码,那么{}也可一省略
例:let say = name => console.log("Hello "+ name);
say(LYL); // Hello LYL
递归函数
function login(){
let pwd = prompt("请输入密码:");
if(pwd != "123456"){
login(); // 若密码错误,则反复执行login函数
}
alert("欢迎回来!");
}
变量作用域
-
在JavaScript中{}外面的作用域称为“全局作用域”
-
函数后边{}中的作用域为局部作用域“局部作用域”
-
在ES6中只要没有和函数结合在一起,就是“块级作用域”
例:if(true){
// “块级作用域”
}
while(false){
// “块级作用域”
}
-
块级作用域和局部作用域区别
①在块级作用域中通过var定义的变量是全局变量
②在局部作用域中通过var定义的变量是局部变量
例:{
var num = 666; // 全局变量
let num = 777; // 局部变量
}
-
-
无论在块级作用域还是在局部作用域,省略变量前边的let或者var就会变成一个全局变量