-
参数扩展
-
默认参数
function fn(name,age=1){ console.log(name+","+age) } fn("Amy",18) //Amy 18 fn("Amy",) //Amy fn("Amy") //Amy 1
注:
- 使用默认参数,不允许同名参数
- 只有在未传递参数或参数为 undefined 时,才使用默认参数, null 值是有效的值传递
-
不定参数
function f(...values){ console.log(values.length) } f(1,2) //2
-
-
箭头函数
更加简洁的函数书写形式
参数 => 函数体
-
基本用法
let f = v=>v //等价于 let f = function(v){ return v } f(1) //1
没有参数时或有多个参数时,用 () 括起来
var f=(a,b)=>a+b var f=()=>1
函数体多行语句时,用 {} 括起来,一行语句 {} 可省略
返回对象时,为区分代码块,用 () 将对象括起来
var f=(id,name)=>({id:id, name:name})
注:箭头函数没有 this、super、arguments、new.target的绑定
-
this
- 普通函数
- this 总是代表着函数的直接调用者
- 默认情况下,没有直接调用者,this -> window
- call,apply,bind 可以绑定 this
- 箭头函数
- 指向上下文对象(父级作用域)的 this 指向——指向最近的函数的 this 指向
- 偶尔没有上下文对象则指向 window
- apply、call、bind 无法改变箭头函数的 this 指向
var Person = { age: 18, sayHello: function(){ setTimeout(function(){ console.log(this.age) }) } } var age = 20 Person1.sayHello() //20,setTimeOut的匿名函数没有直接调用者,this 指向 window var Person1 = { age: 18, sayHello: function(){ setTimeout(()=>{ console.log(this.age) }) } } var age = 20 Person1.sayHello() //18,指向 sayHello() 的 this
var Person = { age:18, sayHello:()=>{ console.log(this.age) } } var age = 20 Person.sayHello() //20 没有上下文函数,this 指向 window var Person1 = { age: 18, sayHello: function(){ console.log(this.age) } } var age = 20 Person1.sayHello() //18,函数的直接调用者为 Person1 ,所以 this 指向 Person1
- 普通函数
-