2017-08-01 40 views
1

快速的问题Arrow功能语法,我是新与ES6语法和typscript和我刚刚发现这个代码在我目前NG2项目:与分配ES6

this.contextActions.getCurrentContextAction().subscribe((link) => this.currentAction = link); 

只是要清楚,如果我理解正确。

函数subscribe将带参数(link)的函数作为参数,并将输入参数赋值给当前动作,并返回此赋值的结果?

我的理解是否正确? 这个箭头函数实际返回什么?分配的结果? 一个assigment不会返回任何正确的?

请把这件事告诉我。

感谢

回答

2

对不对我的理解?这个箭头函数实际返回什么?分配的结果?

是的。它可能并不重要,这取决于调用它的代码是如何处理返回值的。

一个assigment不会返回任何正确的?

它评估为分配值。

var bar, foo; 
 
foo = (bar = 1); 
 
console.log("Foo is " + foo);

+0

一些小除了解释。这是“箭头函数”,它隐含了定义内联函数和“返回”的结果。链接到文档https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions – hsd

1

的分配不返回任何东西吗?

错了,转让的价值是分配值:

var a; 
 
console.log(a = 5);

这就是为什么你可以做这样的事情:

var a, b, c; 
 
console.log(a = b = c = 5); // all have the value 5

所以箭头函数返回它的参数link。我不知道subscribe函数是否对返回值做了一些处理。大概不会。

其余的理解是正确的。

-2

测试这个方法的一个好方法是打开浏览器并查看它的功能。让我们来看看控制台登录分配时在Chrome开发工具中会发生什么。

var someNum = 5; 

console.log(someNum = 20); 
1

这是有效地相同:

var _this = this; 
this.contextActions 
    .getCurrentContextAction() 
    .subscribe(function(link) { 
    return _this.currentAction = link 
    }); 

订阅接受一个函数,将由订阅在被内部调用一个单一的参数(链接)某个阶段。

在这种情况下,链接是一个内部生成的变量,它被赋予您作为输入传入的函数。你可以交替进行以下操作:

function myFunction(link) { 
    return _this.currentAction = link 
} 

var _this = this; 
this.contextActions 
    .getCurrentContextAction() 
    .subscribe(myFunction); 

箭头功能分配给您的回调this.currentAction,然后在单个语句返回值

例如为:

var a, b, c; 

console.log(a = 5); // Logs out 5 

function test() { 
    return b = 6; 
} 

c = test(); 
console.log(b); // Logs out 6 
console.log(c); // Logs out 6 
+0

任何人都解释downvote在这里?这是唯一真正解释为什么箭头函数与正常函数不同的函数。它们没有像普通函数那样的范围('this')或'arguments'变量固有的范围。 –

-1

如果你没有使用=>它看起来像这样

var _that = this; 
.subscribe(function(link){ 
    return _that.currentAction = link; 
} 

它返回分配的值。

查看docs

(参数1,参数2,...,paramN)=> {语句}
(参数1,参数2,...,paramN)=>表达
//等效于:(参数1,参数2,...,paramN) => {return expression; }

//括号是可选的时候,只有一个参数名:
(singleParam)=> {语句}
singleParam => {语句}

+0

它不会。箭头函数和函数表达式获得不同的'this'值。您也忽略了关于返回赋值表达式的含义的问题。 – Quentin

+0

@Quentin修正了它。 –

+0

仍然没有解释'return _that.currentAction = link'的意义是什么。 – Quentin