函数(function)
是被设计为执行特定任务的代码块
说明:
函数可以把具有相同或相似逻辑的代码“包裹”起来,通过函数调用执行这些被“包裹”的代码逻辑,这么做的优势
是有利于精简代码方便复用。
1.1 声明函数:
function 函数名(参数){
函数体
}
1.2 调用函数:
函数名()
注:1.在执行代码之前,js引擎会首先执行一遍扫描,会把扫描的函数声明提升到源代码数的最顶
部,然后才逐步开始执行代码,所以调用无论是在声明前后,都是没有问题的
2.但是,如果将函数赋值给某个变量,那么先调用后声明,就会报错
3.函数一次声明可以多次调用,每一次函数调用函数体里面的代码会重新执行一次
传参:
1.3形参和实参
注:如果实参的个数大于形参的个数,只会取到有对应的形参个数
如果实参的个数小于形参的个数,但调用一个没有实参的形参就会undefined
变量声明了,但没赋值: 默认值为undefined
形参: 声明函数的时候,在小括号内部定义的变量
实际执行效果,相当于声明了变量
function getSum(num1, num2) {
变量声明了,但没赋值: 默认值为undefined
let num1
let num2
相当于系统 内部帮我们做的
num1 = 20
num2 = 50
}
getSum(20, 50);
实参: 函数执行的时候,在小括号内部传递的数据
1.4默认参数值
通过直接为形参进行赋值,来实现初始化,例如: function move(right, left =1)
引号逻辑或短路来判断
当形参没传实参时, 默认值为 undefined
funciton move(left,right) {
left = left || 0; 如果left是真的,则返回left,如果left是假的,则返回0
}
2.返回值(return)
如果retum后面什么数据都没有,则返回undefined.
函数可以没有return,这种情况函数默认返回值为undefined
函数体内部的值,外部无法访问(作用域),所以需要通过reture返回内部的结果
return之后的代码都不会执行,所有有终止函数的功能
return后面可以连续跟多个值,用逗号隔开,但最后只会返回最后一个值, return 1,2; 1/2
在函数体中使用return关键字能将内部的执行结果交给函数外部使用
3.作用域
只要是代码,就至少有一个作用域
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
查找变量的步骤,就是沿着一个个的作用域向上查找的(可以通过控制台debugger中的scopei选项卡查看)
用链式方式查找数据,途径了一个个作用域,以此构成了作用域链
采用就近原则的方式来查找变量值
在块级或局部,未声明变量,直接赋值,相当于创建一个全局变量(不推荐使用)
函数内部的形参可以看做是局部变量,所以形参相当于函数内部定义的局部变量,只有在函数内部可以使用
4.匿名函数
也叫立即执行函数
多个立即执行函数要用;隔开,要不然会报错
let num = 1; 1/内部的变量不会被外部调用