学习JS并困惑何时使用返回语句
Learning JS and confused about when to use return statements
我刚刚学习完函数,我对在函数中使用 return 语句和变量有点困惑。
function test1(frag1, frag2) {
return frag1 + frag2;
}
function test2(frag1, frag2) {
message = frag1 + frag2;
}
alert(test1("this one used", " a return"));
test2("this one used ", "a variable")
alert(message);
除了在警报之外调用 test2 之外,使用 return 和将我需要的东西放在变量中有什么区别吗?我了解到要从函数中获取数据,我必须使用 return 语句。那么test2是如何工作的呢?
你只能使用 return 从函数中获取一件事,对吧?那么,我可以使用test2来获取多个内容吗?喜欢这个:
function test2(a, b, c) {
message1 = a + b;
message2 = b + c;
message3 = a + c;
}
或者,我只是想太多了/只是错了?
提前谢谢。
[...]使用返回和将我需要的东西放在变量中有什么区别吗?
是的。
如果使用全局变量,例如,未在函数中使用var
声明的变量,则该变量将在全局范围内创建。这意味着您可能会意外覆盖具有相同名称的变量,并可能导致各种难以诊断的错误。全球范围通常是一件坏事。
test2
"有效"message
因为它在全球范围内,随处可见。爱因斯坦会称之为"远距离的幽灵动作",这使得代码更难推理,例如,"这个变量已经改变了——怎么改变?为什么?哪里?在什么情况下?"都变得更加难以回答。
使用return
语句并将值修改更改的位置集中保存在尽可能小的范围内,可以更轻松地推理正在发生的事情。
避免全局变量(例如示例中的"消息"(是一种更简洁的编程方法。
使用函数返回值可以显示多个不同的消息,而不会产生"副作用"。
在这种情况下,副作用是变量"message"只能保存一条消息并在任何给定时间显示它。
考虑一下(干净的方法(:
function sqr(n) {
return n * n;
}
function msg1() {
return "Hello 1";
}
function addIt(n1, n2) {
return n1 + n2;
}
alert(sqr(5));
alert(msg1());
alert(addIt(5, 5));
它关于范围。您提供的第一个示例起作用的原因是因为缺乏message
的范围。如果你像以前一样定义消息,它会继承全局窗口对象,因此每个人都可以访问:
function notSoPrivate(){
message = 'test';
}
console.log(message); // logs 'test'
但是,如果您在变量的声明前面加上单词 var
,它会在本地将其范围限定为它所在的对象/函数:
function morePrivate(){
var message = 'test';
}
console.log(message); // logs undefined
这允许您在函数中执行多个操作,而不会污染全局window
对象,强烈建议这样做。
如果要返回多个项目,可以返回一个数组:
function test2(a, b, c) {
var message1 = a + b,
message2 = b + c,
message3 = a + c;
return [message1,message2,message3];
}
console.log(test2(1,2,3)[0]); // logs 3
或者我的首选选项,一个对象:
function test2(a, b, c) {
var m1 = a + b,
m2 = b + c,
m3 = a + c;
return {
message1:m1,
message2:m2,
message3:m3
};
}
console.log(test2(1,2,3).message1); // logs 3
希望这有所帮助!
使用返回值和使用变量进行输出之间主要有两个区别:
- 使用返回值时,遵循代码的作用要容易得多。
- 要返回变量中的值,它必须是全局的,并且您应该尝试将全局变量的使用保持在最低限度。
当您使用变量进行输出时,您需要知道函数将值放在哪里才能遵循代码。仅查看调用函数的代码并不能提示函数和输出之间存在关系:
test2("this one used ", "a variable")
; oh? where did message come from all of a sudden?
alert(message);
当你使用返回值时,很明显该值来自函数,所以查看代码会告诉你所有你需要知道的关于输出是如何传递的:
var message = test2("this one used ", "a variable")
alert(message);
如果要从函数返回多个值,可以使用数组或对象:
function test2(a, b, c) {
return {
message1: a + b,
message2: b + c,
message3: a + c
};
}
您仍然需要知道对象包含什么才能使用返回值,但至少输出是如何传递的清晰可见的:
var o = test2("See how ", "I control where ", "it goes");
alert(o.message2);
- 我们可以在javascript中使用函数作为返回语句吗
- 如何在提示下获取和使用从window.onbeforeunload事件的返回语句显示的值
- 为什么模块级返回语句在 Node.js 中有效
- 不了解这种返回语句是如何工作的
- 返回语句后的函数声明全局变量不会被覆盖
- 检查浏览器支持时出现非法返回语句
- 非法返回语句错误
- 最佳实践:在 JavaScript 中返回语句
- 有条件地在返回语句中包含 json 字段
- Javascript 条件返回语句(Shorthand if-else 语句)
- 绑定函数的返回语句中参数的推理是什么
- 具有多个返回语句的函数返回什么
- 带有返回语句 JavaScript 的三元运算符
- 了解返回语句
- 无法调用返回语句的函数
- 为什么在 cosole 之前返回语句.log会影响 JavaScript 中的整个函数
- 未捕获的语法错误:非法返回语句
- 学习JS并困惑何时使用返回语句
- 在 for 循环中使用多个返回语句
- 如何在 Javascript 中提取包括返回语句在内的通用逻辑