JS函数

154 阅读1分钟

四种方式定义函数

具名函数

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

(下面待补充)

作用域

闭包

形式参数

返回值

调用栈

函数提升

arguments(除了箭头函数)

this(除了箭头函数)