函数的五种声明方式

1.具名函数

1
2
3
function x(input1,input2){
return undefined
}

2.匿名函数

1
2
3
4
5
var x = function  (input1, input2){
return undefined
}

x.name // 'x'

3.具名函数赋值

1
2
3
4
5
var x = function  y(input1, input2){
return undefined
}

x.name // 'y'

4window.Function

1
2
var x = new Function('x','y','return x+y')
x.name // "anonymous"

5箭头函数

1
f= (x,y)=>{return x+y}

js不一致性

1
2
function y(){}
console.log(y) //y(){}'
1
2
3
var x = function y(){}

console.log(y) //报错

常见考点

作用域

1
2
3
4
5
6
7
8
9
10
var a = 1
function f(){
function f1(){
var a = 3
}
var a = 2
}

f.call()
console.log(a) //1

log结果是1

1
2
3
4
5
6
7
8
9
10
var a = 1
function f(){
function f1(){
var a = 3
}
var a = 2
}

f.call()
console.log(a) //1

变量提升

1
2
3
4
5
6
function f(){
console.log(a)
var a = 2
}

f.call() // a是undefined

这里涉及到变量提升,变量提升后的代码是这样的

1
2
3
4
5
6
7
function f(){
var a
console.log(a)
a = 2
}

f.call() // a是undefined

闭包

1
2
3
4
5
6
7
8
9
10
function sum(a){
function wrapper(b){
return a + b
}
return wrapper
}

sum.call(4).call(3) // 7
o = sum(8) //返回一个函数
o(2) // 10

闭包就是一个函数能引用到它作用域外的变量
这里 函数 o 依然可以引用到 8