函数的 5 种声明
具名函数
function f(x,y){
return x+y
}
f.name // 'f'
匿名函数
var f
f = function(x,y){
return x+y
}
f.name // 'f'
具名函数赋值
var f
f = function f2(x,y){ return x+y }
f.name // 'f2'
console.log(f2) // undefined
window.Function
var f = new Function('x','y','return x+y')
f.name // "anonymous"
箭头函数
var f = (x,y) => {
return x+y
}
var sum = (x,y) => x+y
var n2 = n => n*n
面试会问:函数的name属性
如何调用函数 f.call
f.call(asThis, input1,input2)
其中 asThis 会被当做 this,[input1,input2] 会被当做 arguments
this 和 arguments
function f(){
'use strict'
console.log(this)
console.log(arguments)
return undefined
}
f.call(1,2,3) // this 为 1,arguments 为 [2,3]
不使用 'use strict',如果没传参,默认this是window,使用 'use strict',如果没传参,默认this是undefined
第一个参数是this,是为了和Java看起来像
作用域---类似树
每次写题目记得把变量提升(function也是哦)
易错点:f4用的是全局变量的那个a
这里第七行加了个a=2,然后再调用f4的,所以这时候a已经被赋值2了