函数的五种声明方式
1.具名函数
function f(x,y){
return x+y
}
f.name // 'f'
2.匿名函数
var f
f = function(x,y){ //匿名函数必须赋值一个变量
return x+y
}
f.name // 'f'
3.具名函数赋值
var f
f = function f2(x,y){ return x+y } //f是函数,f2是未定义的
f.name // 'f2'
console.log(f2) // undefined
4.window.Function //Function是函数对象
var f = new Function('x','y','return x+y')
f.name // "anonymous"
n = 1
new Function('x','y','return x+'+n+'y')
f(1,2) //4
5.箭头函数
var f = (x,y) => {
return x+y
}
var sum = (x,y) => x+y
var n2 = n => n*n
f = (x,y) => {
var n = x * 3
var m = y * 2
return n+m
}
函数的name属性
函数的本质
f(1,2) = f.call(undefined,1,2)
this 和 arguments
function f(){
'use strict' //严格模式下 this为call的第一个参数 如果是在普通模式下 this会被当成window
console.log(this)
console.log(arguments)
return undefined
}
f.call(1,2,3) // this 为 1,arguments 为 [2,3]
call stack 调用栈
作用域
搜索 方应杭 闭包