27函数

函数的 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属性


image.png

如何调用函数 f.call

f.call(asThis, input1,input2)
其中 asThis 会被当做 this,[input1,input2] 会被当做 arguments
image.png

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也是哦)


先打印出undefined在1

易错点:f4用的是全局变量的那个a


image.png

这里第七行加了个a=2,然后再调用f4的,所以这时候a已经被赋值2了


无论点击哪一个,都是打印length的值,因为开始就初始化完毕了,值会变化

闭包

image.png

你可能感兴趣的:(27函数)