我觉得我太愚蠢了解之间的区别:
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
我真的无法理解。这是数据是数字还是数组/对象?
感谢。
答案 0 :(得分:3)
赋值操作和函数返回值是两个不同的东西。
许多编程可以被认为是将值从一个地方移动到另一个地方。
分配从一个地方获取值并将其存储在另一个地方。在您的代码中,例如:
a = 1;
评估右侧的表达式(1
),结果值(1
)存储在a
中。 (是的,1
是一个表达式;在这种情况下,它是一个文字表达式,为我们提供值1
。)同样:
b = a;
评估右侧的表达式(a
),结果值(1
)存储在b
中。
返回做了两件事(用JavaScript和大多数 - 但不是全部 - 其他语言)
return
关键字后面的表达式,然后将结果值设置为函数的返回值。对于函数,我们大部分时间(在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 z
(return
)之后计算表达式,然后终止函数,返回结果值(z
在这种情况下)2
的结果因此是值y
2
,它使用其参数将值console.log
输出到控制台 *“reference” - 在JavaScript和大多数(但不是全部)其他编程语言中,我们实际上并不复制对象;相反,我们传递一个称为对象引用的值,这基本上是告诉语言运行时对象在内存中的位置(就像街道地址所说的那样)。对象不是值,但对象引用是值。由于JavaScript中的函数是对象,2
会创建一个函数,然后在y = function() { }
中存储对它的引用。
答案 1 :(得分:1)
赋值运算符为JavaScript变量赋值。
return
停止执行函数并从中返回一个值,您可以使用=
符号“分配”该值或将其丢弃