1、箭头函数
ES6 允许使用 “箭头”(=>)简化函数的定义。
注意点:
1、形参个数如果为1个,可以省略小括号不写;
2、如果函数体里面只有一个语句,可以省略大括号不写, 并且他会默认返回 => 符号后面的数据。
3、如果函数体有多个语句,则不能省略大括号。
4、如果函数体只有一个语句,且返回一个对象,建议是,不要写简写的方式。
// function func(){ // console.log("hello"); // } // 以上代码使用箭头函数书写为: var func = () => { console.log("hello"); }; func();
// 无参数无返回 let func11 = () => console.log('func11'); func11(); // 无参数有返回 let func22 = () => 'func22'; console.log(func22()); // 有参数无返回 let func33 = x => console.log('func33', x); func33(2); // 有参数有返回 let func44 = (x, y) => { let sum = x + y; return sum + 'func44'; }; console.log(func44(1, 2));
注意:如果return的是单一个对象,则需要加上大括号和return,例如:
// let func55 = x => {a:10, b:20}; //报错 let func66 = x => { return {a:10, b:20} };
2、箭头函数中的this
箭头函数没有自己的作用域,即箭头函数 this 指向其外层作用域
function People(name,age){ this.name=name; this.age=age; this.say = function () { // console.log(this.name); setTimeout(function () { console.log(this.name); 改此处this为_this即可实现正常输出名字的结果 },1000); } } var p1 = new People("zhangsan", 15); p1.say(); // undefined
p1.say()为什么输出undefined在方法中又重新定义了函数体,函数体内this指向丢失解决方法:在people函数内定一个全局变量var _this=this;在调用时改为使用全局变量去调用