27 JS函数
四种方式定义函数
1 具名函数
function 函数名(形参1,形参2){
语句
return 返回值
}
2 匿名函数
var a = function(x,y){
return x+y
}
3 箭头函数
let f1 = x => x*x
let f2=(x,y)=> x+y // 两个形参时圆括号不能省
let f3 = (x,y) => {return x+y} //有花括号时必须要加上return
如果一个函数返回值是一个对象 那么直接用let f4 = x => {name:x} 会报错 有两种方法可以解决 一种是({name:x})用圆括号把{name:x}包起来 第二种是{return {name:x}} 加一个大括号 但是{}里面必须要加return 不然它的值为undefined
let f4 = x => ({name:x}) //
f4('lulu') //lulu
let f5 =x =>{return {name:x}}
f5('liwu')//liwu
4 构造函数
let f=new Function('x','y','return x+y')
基本没人用,但是能让你知道函数是谁构造的
所有函数都是Function 构造出来的
包括Object、 Array 、Function 也是
arguments和this
function fn(){
console.log(arguments)
console.log(this)
}
fn(1,2)
1 如何传arguments
调用fn即可传arguments
fn(1,2,3) 那么arguments就是【1,2,3】伪数组
2 如何传this
目前可以用 fn.call(xxx,1,2,3) 传this和arguments
而且xxx会被自动转化成对象
this的两种使用方法
1 隐式传递
fn(1,2) //等价于fn.call(undefined,1,2)
obj.child.fn(1) //等价于obj.child.fn.call(obj.child,1)
2 显示传递
fn.call(undefined,1,2)
fn.apply(undefined,[1,2])
箭头函数
1 里面的this就是外面的this
console.log(this) //window
let fn=()=>{console.log(this)}
fn() // 它的this也是指window
2 就算你加call 都没有
fn.call({name:'lulu'}) //window .call里面指定了 但是打印出来的this还是window