JS函数基础知识

1.函数的作用

函数是将具体的操作封装成代码块,当下次用到这个操作的时候就可以直接使用这个函数,为了代码的复用性,使代码更加精简,便于修改需求和项目维护

2.函数的创建及调用

function 函数名(形参) {
    函数体:这个函数的具体功能
    return 返回值 // 调用函数得到的值(注:可以没有返回值,遇到return就退出函数,想返回多个值用数组)
}
// 函数的调用
函数名(实参)
  1. 实参的值会赋值给形参,两者的个数可以不匹配
  2. 如果实参的个数小于形参的个数,未被赋值的变量值为undefined
  3. 如果实参的个数大于形参的个数,多于的实参值会被舍弃

3.函数的类型

console.log(typeof function getSum() {})  // ‘function’

4.变量的作用域

全局作用域:函数以外的作用域,有且只有一个全局作用域

局部作用域:函数以内的作用域,可以有多个函数作用域

全局变量:在全局作用域下声明的变量,可以在任意作用域下使用

局部变量:在局部作用域下声明的变量,只能在局部作用域下使用

JS的预加载/预解析:

在程序执行之前,会将var声明的变量提升在所在作用域的最前面。只提升声明部分,不提升赋值部分

变量的查找规则:就近原则

形参属于局部变量,只能在所属函数中使用

5.函数的作用域

全局函数:在全局作用域下创建的函数,可以在任意作用域下调用

局部函数:在函数作用域下创建的函数,只能在所处作用域下调用

函数提升:在程序执行前,会将函数的全部提升到所在作用域的最前面

6.匿名函数

没有名字的函数。在使用时,可以当做变量的值、当做参数值、可以自调用;ES6中的匿名函数等同ES5,但在ES6中,匿名函数包含了箭头函数。

//将匿名函数当做变量的值:
let show = function(a,b) {
    console.log(a,b)  //10,20
}
show(10,20)

//将匿名函数当做参数值:
function show5(k){
    //回调函数
    k();
}
show5(function(){
    //调用了匿名函数
    console.log('a');//a
})
//匿名函数自调用:(还有解决全局污染的作用)
;(function(){
    console.log('b'); //b
})()

7.箭头函数

(1)写法:

        去掉函数名,去掉function,在() 与 {}之间加上=>

//将匿名函数当做变量的值:
let show = (a,b) => {
    console.log(a,b)  //10,20
}
show(10,20)

test(10, 20, (z) => {
    console.log(z)
})

//匿名函数自调用:(还有解决全局污染的作用)
;(() => {
    console.log('b') //b
})()

(2)箭头函数的变形

当箭头函数函数体只有一条语句时,包裹函数的{}可以去掉;

当箭头函数体中只有一条返回语句时,可以省去{},并省去return;

当有仅只有1个形参时,包裹形参的()可省。

// 当箭头函数函数体只有一条语句时,可以省略{}
let show1 = () => console.log('a')
show1()

// 当箭头函数只有一条返回语句时,可以去掉{}和return
let show2 = () => 100
console.log(show2())  // 100

// 当带参数的箭头函数只有一条返回语句时,可以去掉{}和return
let show3 = (m,n) => m + n
console.log(show3(10, 100)) // 110

// 当箭头函数有且仅有一个形参时,包围形参的()可以省略
let show4 = key => key + 1
console.log(show4(200)) // 201

(3)箭头函数中的this

待续。。。

8.回调函数

就是把一个函数类型的值作为参数传递给另一个函数,被传递的这个函数就叫做回调函数。

function xin (madai){
	madai()//调用传进来的函数
}
function ming (){
	console.log('普通函数')
}
xin (ming) //传递的是普通函数的名字
xin (function(){ }) //传递的是匿名函数的整体

9.递归

函数自己调自己。本身是个死循环,切记设置边界条件及时退出

要点:总结规律+边界条件

// 计算5!
function f(num) {
    if (num==1) {
        return  1
    } else {
        return f(num-1)*num
    }
}
console.log(f(5)) // 120

关于作用域的面试题

let a, b = 0, fn = function() {
    let a = b = 2;
};
fn();
console.log(a, b)


// undefined, 2
/*
 a:先声明了a但未赋值,fn中定义的a只作用于fn内部,输出值输出外部的a,故a仍然是undefined
 b:先声明了b并给b赋值为0,fn中又将2赋值给b,并未再声明一个b,所以作用的是fn外部的b,故改变了b的值
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值