作业返回的值

use*_*165 40 javascript assignment-operator

为什么常规赋值语句(比方说 x = 5)返回赋值的值(5在本例中),而赋值与变量declaration(var x = 5)一起返回undefined

我通过在Chrome浏览器的Javascript控制台中执行这些语句获得了返回值:

> var x = 5;
undefined
> y = 5;
5
Run Code Online (Sandbox Code Playgroud)

Pau*_*aul 34

这就是语言的设计方式.它与大多数语言一致.

让变量声明返回除了undefined没有意义之外的任何东西,因为你不能var在表达式上下文中使用关键字.

如果要将多个变量一次设置为相同的值,则赋值expression不是a statement非常有用:

x = y = z = 2;
Run Code Online (Sandbox Code Playgroud)

它也可以像这样使用:

x = 2*(y = z); // Set y = z, and x = 2*z
Run Code Online (Sandbox Code Playgroud)

然而,这不是最可读的代码,它可能会更好地编写为:

y = z;
x = 2*z;
Run Code Online (Sandbox Code Playgroud)

  • 如果Javascript将变量声明视为一个表达式(可以在其他表达式等中使用),将会怎样? (2认同)

Ja͢*_*͢ck 7

那是因为var x = 5;是一个变量语句,而不是表达式.

ECMAScript语言参考的第12.2节描述了该语句的行为.

  1. 评估VariableDeclarationList.
  2. 返回(正常,空,空).

这基本上是一个void返回值.


orb*_*orb 6

赋值运算符(即等号)(1) 将右侧操作数(即变量、属性或函数的值或值)分配给左侧操作数(即变量或属性) ),然后 (2) 在计算表达式的其余部分之前,赋值表达式(例如,y = 10)将成为一个简单操作数,其值与其右侧操作数(例如,10)相同。这类似于在计算表达式时将被调用函数替换为其返回值(尽管函数调用按操作顺序排在第一位,赋值操作排在第十四位):

var x, y, z = 1;
x = z + (y = 2); // x === 3     

function returnTwo () {
    return 2;
}

x = z + returnTwo(); // x === 3
Run Code Online (Sandbox Code Playgroud)

请注意,x 现在不仅等于 3,而且整个表达式的计算结果均为 3。

关键字的目的var是将变量绑定到当前作用域。使用关键字声明的变量var绑定到声明它们的范围。该var关键字将最左边的变量(或属性)分配为对计算表达式的值的引用:

var fun = function () {
    var x = 1;
    var y = x + 1; 
    return y;
}

// The x and y variables are bound to the scope of the fun function.
Run Code Online (Sandbox Code Playgroud)

var关键字与表达式一起使用称为声明。声明是不评估值的操作,甚至不是未定义的(即使您的控制台打印未定义)。此外,声明不能出现在 JavaScript 需要表达式的地方,正如本文的其他答案所示。