函数
在JS中,可以使用function语句来定义一个函数。函数声明function是一个关键字, f叫函数名,()是函数的特殊标志,{}叫函数体,在()中可以给这个功能块一些数据,那么在{}中这个功能块可以给你返回一些数据。基本语法如下:
fuction f(参数1,参数2){
语句
[return 返回值]
}
函数提升
JS代码在执行前有一个预编译过程:把加var的变量提升 把函数提升 提升到代码段的最前面。
在JS中提升有变量和函数的提升
(1)变量提升
在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。例子如:
function f() {
console.log(a) var a=100;}
f() 输出undefined
其实代码是这样执行的:
function f() {var a console.log(a) a=100;}
f()
再看一个例子:
var a =100; {
console.log(a)
var a= 666;
}
此时输出100
而let的使用解决了变量的提升,let可以直接形成一个块级作用域,一个{}就是一个块级作用域。
函数的调用
函数调用的过程就是实参向形参赋值的过程。在程序中,要想是用自己定义的函数,必须要对函数记性定义,而在定义函数的时候,函数本身是不会执行的,只有在调用函数时才会执行。
函数声明处,写的参数是形参,形参你可以当它当用函数体内部的局部变量在函数外面是不能访问函数中的参如果给一个函数传递了一个基本数据类型的数据,是把栈区中数据了一份赋了形参,值传递。
例 :

f(a):是函数声明处,a是形式参数,简称形参。形参你可以当它当用函数体内部的局部变量。
f(x):是函数调用处,x是实际参数,简称实参。在函数调用处,传递的参数是都是实参。
如果给函数传递的数据是引用的数据类型,本质是传递是地址,也叫引用传递。




函数返回值
在JS中,如果一个函数没有指定返回值,那么这个函数返回undefined。
函数能返回多个值?答:一个。return 语句只能返回一个值,不能返回多值。 return只能返回一值,如果你要返回多值,请你把多个值放到一个容器(数组,对象)
函数可以是另一个函数的参数
在函数式编程中,你可以把一个函数当作另一个函数的参数,我们之前也见过,setTimeout()这个函数是已经封装好的,我们直接使用,如下:我们把function(){}作为了setTimeout()这个函数的参数,setTimeout()这个函数有两个参数,一个是函数,一个是时间,如果一个函数当作了另一个函数的参数,那么我们就这个函数为回调函数,在函数式编程中,函数有用法主要两类:普通函数的使用;高阶函数:回调函数,偏函数,函数柯里化,函数的共振....
setTimeout(function(){
console.log("f...")
},5000)
这是一个定时器函数,

在这里,compute这个函数有三个参数:第一个参数f是一个回调函数,第二个和第三个参数是形参
以后多用这种形式计算两个数的和或差,如:
compute(function(x,y){
return x+y;
},1,2)
setTimeout(function(){
},1000)