使用箭头功能设置变量

时间:2019-04-29 15:14:03

标签: javascript angularjs ecmascript-6 arrow-functions

我已经习惯了箭头功能,所以问题非常迅速。我知道它们隐式返回,并且只要它是表达式,我们就可以隐式返回。但是,例如,我可以减少以下内容吗 $scope.setEdit = () => { $scope.edit = true; }$scope.setEdit = () => $scope.edit = true; 没有遇到任何不良行为?我不确定简单分配变量时箭头函数的行为。我只在通常会有return语句的地方使用过,从来没有简单的赋值。

这只是一个例子。谢谢!

3 个答案:

答案 0 :(得分:2)

赋值只是一个表达式,就像其他表达式一样:

  const a = () => b = 1;

  console.log(
    c = 1,
    a()
  );
  

没有遇到任何不良行为?

这取决于调用方是否期望返回某些内容。如果没有,返回的结果将无处可寻,就没有任何区别。

答案 1 :(得分:2)

这与箭头功能无关,但与表达式求值有关。表达式计算得出的结果(可能有副作用)将是返回值。

此箭头表示功能:

() => a = b

与以下内容相同并返回:

() => {
    return a = b;
}

该函数具有副作用:a获得一个值。赋值可以出现在表达式中并返回赋值。因此等效于:

() => {
    a = b;
    return b;
}

答案 2 :(得分:2)

我认为您对箭头功能的工作方式有误解。当您使用速记版本时,它们仅隐式返回。

这就是我的意思-这三个函数在功能上相同,都返回字符串'hello'

function a() { return 'hello' }
const b = () => { return 'hello' }; //arrow Fn /w braces needs a return statement to return anything
const c = () => 'hello';            //shorthand arrow Fn w/o braces returns whatever the arrow points to

这里是使用所有不同功能样式的演示示例

//regular function with no return value
var a = 'bar';
const myFunc1 = function() { a = 'foo'; }
console.log(myFunc1(), a);

//regular function with a return value
a = 'bar';
const myFunc2 = function() { return a = 'foo'; }
console.log(myFunc2(), a);

//arrow function with a return value
a = 'bar';
const myFunc3 = () => { return b = 'foo'; }
console.log(myFunc3(), a);

//arrow function with no return value
a = 'bar';
const myFunc4 = () => { b = 'foo'; }
console.log(myFunc4(), a);

//arrow function using shorthand, which has an implicit return value
a = 'bar';
const myFunc5 = () => b = 'foo';
console.log(myFunc5(), a);