Javascript 是';箭头函数';和';功能';等效/可互换?
ES2015中的箭头函数提供了更简洁的语法Javascript 是';箭头函数';和';功能';等效/可互换?,javascript,ecmascript-6,arrow-functions,Javascript,Ecmascript 6,Arrow Functions,ES2015中的箭头函数提供了更简洁的语法 我现在可以用箭头函数替换所有函数声明/表达式吗 我要注意什么 示例: 构造函数 function User(name) { this.name = name; } // vs const User = name => { this.name = name; }; 原型方法 User.prototype.getName = function() { return this.name; }; // vs User.proto
- 我现在可以用箭头函数替换所有函数声明/表达式吗李>
- 我要注意什么
function User(name) {
this.name = name;
}
// vs
const User = name => {
this.name = name;
};
原型方法
User.prototype.getName = function() {
return this.name;
};
// vs
User.prototype.getName = () => this.name;
对象(文字)方法
回调
setTimeout(function() {
// ...
}, 500);
// vs
setTimeout(() => {
// ...
}, 500);
可变函数
function sum() {
let args = [].slice.call(arguments);
// ...
}
// vs
const sum = (...args) => {
// ...
};
tl;博士:不箭头函数和函数声明/表达式不是等价的,不能盲目替换。
如果要替换的函数未使用
this
,参数
,并且未使用new
调用,则选择“是”
通常情况下:视情况而定。箭头函数的行为与函数声明/表达式不同,因此让我们先看看它们的区别: 1。词法
此
和参数
箭头函数没有自己的此
或参数
绑定。相反,这些标识符像其他变量一样在词法范围内解析。这意味着在箭头函数内部,this
和arguments
指的是箭头函数在环境中定义的this
和arguments
的值(即箭头函数的“外部”):
//使用函数表达式的示例
函数createObject(){
log('createObject`:'内,this.foo);
返回{
傅:42,,
bar:function(){
log('Inside'bar`:',this.foo);
},
};
}
createObject.call({foo:21}).bar();//在createObject中重写`this`
tl;博士:不箭头函数和函数声明/表达式不是等价的,不能盲目替换。如果要替换的函数未使用
this
,参数
,并且未使用new
调用,则选择“是”
通常情况下:视情况而定。箭头函数的行为与函数声明/表达式不同,因此让我们先看看它们的区别: 1。词法
此
和参数
箭头函数没有自己的此
或参数
绑定。相反,这些标识符像其他变量一样在词法范围内解析。这意味着在箭头函数内部,this
和arguments
指的是箭头函数在环境中定义的this
和arguments
的值(即箭头函数的“外部”):
//使用函数表达式的示例
函数createObject(){
log('createObject`:'内,this.foo);
返回{
傅:42,,
bar:function(){
log('Inside'bar`:',this.foo);
},
};
}
createObject.call({foo:21}).bar();//在createObject中重写`this`
Arrow functions=>迄今为止最好的ES6功能。他们是一个巨大的挑战
ES6的强大补充,我经常使用
等等,您不能在代码中的任何地方都使用箭头函数,它不会在所有情况下都起作用,例如这个中箭头函数不可用。毫无疑问,arrow函数是一个很好的补充,它带来了代码的简单性
但是当需要动态上下文时,不能使用arrow函数:定义方法、使用构造函数创建对象、在处理事件时从中获取目标
不应使用箭头函数,因为:
他们没有此
它使用“词法范围”来计算“this
”的值
应该是。在简单的单词词法范围中,它使用
在函数的主体内部
它们没有参数
箭头函数没有参数
对象。但同样
可以使用rest参数实现功能
let sum=(…args)=>args.reduce((x,y)=>x+y,0)
sum(3,3,1)//输出-7
`
它们不能与新代码一起使用
箭头函数不能是构造函数,因为它们没有prototype属性
何时使用箭头功能,何时不使用:
不要将函数作为属性添加到对象文字中,因为
无法访问此文件
函数表达式最适合对象方法。箭头函数
最适合于回调或方法,如map
、reduce
或forEach
对按名称调用的函数使用函数声明(因为
它们被吊起来了)
对回调使用箭头函数(因为它们往往更简洁)
Arrow functions=>迄今为止最好的ES6功能。他们是一个巨大的挑战
ES6的强大补充,我经常使用
等等,您不能在代码中的任何地方都使用箭头函数,它不会在所有情况下都起作用,例如这个中箭头函数不可用。毫无疑问,arrow函数是一个很好的补充,它带来了代码的简单性
但是当需要动态上下文时,不能使用arrow函数:定义方法、使用构造函数创建对象、在处理事件时从中获取目标
不应使用箭头函数,因为:
他们没有此
它使用“词法范围”来计算“this
”的值
应该是。在简单的单词词法范围中,它使用
在函数的主体内部
它们没有参数
箭头函数没有参数
对象。但同样
可以使用rest实现功能
function sum() {
let args = [].slice.call(arguments);
// ...
}
// vs
const sum = (...args) => {
// ...
};
// Using
// @func = function() {use this here} or This => {use This here}
using(func) {
return func.call(this, this);
}
var obj = {f:3, a:2}
.using(This => This.f + This.a) // 5
var obj = {f:3, a:2}
(This => This.f + This.a).call(undefined, obj); // 5