分配和返回有什么区别?

时间:2017-03-07 17:19:50

标签: javascript

我觉得我太愚蠢了解之间的区别:

1

var a, b;
a = 1;
b = a;
console.log(b); // 1

2

var x, y;
x = 2;
y = function (z) {
  return z;
}
console.log(y(x)); // 2
我真的无法理解。这是数据是数字还是数组/对象?

感谢。

2 个答案:

答案 0 :(得分:3)

赋值操作和函数返回值是两个不同的东西。

许多编程可以被认为是将从一个地方移动到另一个地方。

分配从一个地方获取值并将其存储在另一个地方。在您的代码中,例如:

a = 1;

评估右侧的表达式(1),结果值(1)存储在a中。 (是的,1是一个表达式;在这种情况下,它是一个文字表达式,为我们提供值1。)同样:

b = a;

评估右侧的表达式(a),结果值(1)存储在b中。

返回做了两件事(用JavaScript和大多数 - 但不是全部 - 其他语言)

  1. 它评估return关键字后面的表达式,然后将结果值设置为函数的返回值
  2. 它结束函数,返回到调用函数的位置。
  3. 对于函数,我们大部分时间(在JavaScript中的所有时间)都是将值传递给函数,让函数用这些值做事,然后让函数给出我们返回一个值(调用函数的结果)。

    在你的:

    var x, y;
    x = 2;
    y = function (z) {
      return z;
    }
    console.log(y(x)); // 2
    

    我们已经了解x = 2的工作原理(请参阅上面的a = 1)。然后我们做:

    y = function (z) {
      return z;
    }
    

    并且,一如既往地评估右侧表达式(function(z) { return z; }),它创建一个函数对象,然后将结果值(函数的引用*)存储在{{ 1}}。

    到目前为止一切顺利。

    现在:

    y

    在那里,我们这样做:

    • 评估最里面的表达式(console.log(y(2)); // 2 ),并获得其结果值(2
    • 调用 2并将该值传递给它
    • y内,它接收y参数中的值,几乎就像你进入函数并将值放入函数内的z变量
    • 然后我们执行z,它在return zreturn)之后计算表达式,然后终止函数,返回结果值(z在这种情况下)
    • 调用2的结果因此是值y
    • 整个过程再次发生2,它使用其参数将值console.log输出到控制台

    *“reference” - 在JavaScript和大多数(但不是全部)其他编程语言中,我们实际上并不复制对象;相反,我们传递一个称为对象引用的值,这基本上是告诉语言运行时对象在内存中的位置(就像街道地址所说的那样)。对象不是值,但对象引用是值。由于JavaScript中的函数是对象,2会创建一个函数,然后在y = function() { }中存储对它的引用。

答案 1 :(得分:1)

赋值运算符为JavaScript变量赋值。 return停止执行函数并从中返回一个值,您可以使用=符号“分配”该值或将其丢弃

https://www.w3schools.com/js/js_assignment.asp

https://www.w3schools.com/jsref/jsref_return.asp