Javascript 学习JS并对何时使用return语句感到困惑
我刚刚学习完函数,对在函数中使用返回语句和变量有点困惑Javascript 学习JS并对何时使用return语句感到困惑,javascript,return,Javascript,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);
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;
}
或者,我是不是想得太多了
提前谢谢
[…]使用return和将所需内容放入变量之间有什么区别吗
对
如果在函数中使用全局变量,例如未使用var
声明的变量,则该变量将在全局范围内创建。这意味着您可能会意外地覆盖同名变量,并可能导致各种难以诊断的错误。全局范围通常是一件坏事
test2
之所以“起作用”,是因为message
在全局范围内,这在任何地方都可用。爱因斯坦将这种行为称为“远处的诡异行为”,这使得代码更难推理,例如,“这个变量发生了变化——如何?为什么?在哪里?在什么情况下?”所有这些都变得更难回答
使用
return
语句并将值修改集中并包含在尽可能小的范围内,可以更轻松地对正在发生的事情进行推理。避免全局变量,例如示例中的“message”,是一种更干净的编程方法
使用函数返回值可以显示多个不同的消息,而不会产生“副作用”
这种情况下的副作用是变量“message”在任何给定时间只能保存一条消息并显示它
考虑一下这个(干净的方法):
这与范围有关。您提供的第一个示例之所以有效,是因为缺少
消息
的作用域。如果按原来的方式定义消息,它将继承全局窗口对象,因此每个人和所有人都可以访问它:
function notSoPrivate(){
message = 'test';
}
console.log(message); // logs 'test'
但是,如果在变量声明的前面加上单词var
,它会将变量的作用域局限于它所在的对象/函数:
function morePrivate(){
var message = 'test';
}
console.log(message); // logs undefined
这允许您在函数中执行多个操作,而不会污染全局窗口
对象,这是高度推荐的
如果要返回多个项目,可以返回数组:
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
function test2(a, b, c) {
return {
message1: a + b,
message2: b + c,
message3: a + c
};
}
希望这有帮助 使用返回值和使用变量作为输出之间主要有两个区别:
test2("this one used ", "a variable")
; oh? where did message come from all of a sudden?
alert(message);
- 在使用返回值时,更容易理解代码的作用
- 要在变量中返回一个值,它必须是全局的,并且应该尽量减少全局变量的使用
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);
var o = test2("See how ", "I control where ", "it goes");
alert(o.message2);
如果要从函数返回多个值,可以使用数组或对象:
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
function test2(a, b, c) {
return {
message1: a + b,
message2: b + c,
message3: a + c
};
}
您仍然需要知道对象包含什么才能使用返回值,但至少可以清楚地看到输出是如何传递的:
var message = test2("this one used ", "a variable")
alert(message);
var o = test2("See how ", "I control where ", "it goes");
alert(o.message2);
首选第一种解决方案而非第二种解决方案的主要原因是可维护性:如果您有多个函数写入/附加到同一全局变量,那么您只是在自找不一致的麻烦。您无法从函数中获得多方面的好处。它设置了多个全局变量。如果你想要多个东西,你应该返回一个散列。像这样操纵全局变量是个坏主意,因为你可能会进入竞争条件。你只能
返回一个值,但该值可能是封装其他值的类型(对象/数组);爱爱因斯坦的参考文献。我使用了很多globals,但我同意——如果你能避免的话,请远离它们。