四种方式定义函数
具名函数
function 函数名(参1,参2){
语句
return返回值
}
匿名函数
//上面的具名函数,去掉函数名就是匿名函数
let a=function(x,y){
return x+y;
}
//a只是保存了函数的地址
具名和匿名函数结合,具名不可调用
函数声明在=右边,由于f1的作用区域不会脱离等于号后面函数表达式
let a=function fn(x,y){ return x+y}
a(3,5)
8
fn(3,5)//报错,
箭头函数
let f1 = x => x*x;
let f2 = (x,y) => x+y;
let f3 = (x,y) =>{return x+y}
let f4 = (x,y) =>({name: x, age: y})//直接返回对象会出错,需要加个圆括号
构造函数
所有函数都是由Function构造的
let a=new Function('x','y','return x+y')
函数自身和函数调用
函数自身
let fn = () => console.log('hi')
fn
结果:不会有任何结果,因为fn没有执行
函数调用
let fn = () => console.log('hi')
fn()
结果:打印hi,有括号才是调用
再进一步
let fn = () => console.log('hi')
let fn2 = fn
fn2
结果:
- fn保持了匿名函数的地址
- 这个地址被复制给了fn2
- fn2()调用了匿名函数
- fn和fn2都是匿名函数的引用而已
- 真正的函数既不是fn也不是fn2
函数的要素
调用时机
调用时才是真的执行时机
let a=1
function f1(){console.log(a)}
a=2
f1()//2
(下面待补充)