userMsg = toUser(“Bob”)正在调用toUser(“Bob”)并将其赋值给userMsg,然后将其与name连接并赋值给greet。因此,我的大脑希望看到greet = toUser(“Bob”)+ name,这显然不是javascript正在做的。用户消息=消息?还是用户消息=到用户(“鲍勃”);
请你帮我弄明白为什么...
function giveMessage(message) {
let userMsg = message;
userMsg = toUser("Bob");
return userMsg;
function toUser(userName) {
let name = userName;
let greet = userMsg + name;
return greet;
}
}
console.log(giveMessage("The world says hello dear: "));
// The world says hello dear: Bob
和这个一样吗
function giveMessage(message) {
let userMsg = message;
let hello = toUser("Bob");
return hello;
function toUser(userName) {
let name = userName;
let greet = userMsg + name;
return greet;
}
}
console.log(giveMessage("The world says hello dear: "));
// The world says hello dear: Bob
2条答案
按热度按时间k0pti3hp1#
下面是第一个用行号注解的代码片段:
函数
giveMessage
是从第1行开始定义的,但只有在console.log()
内部的第13行调用它时才会被调用。调用时,执行步骤的顺序为:
1.执行第1行(将
userMsg
设置为message
的值"The world says hello dear: "
)1.开始执行第2行,计算赋值表达式的右侧(即调用函数
toUser("Bob")
。1.执行第7行(作为函数调用的一部分),并将
name
指定为userName
的传入值"Bob"
。1.执行第8行,将
greet
设置为userMsg
和name
的连接值。请注意,userMsg
仍然保留在步骤1中分配的值,因为我们仍然只计算第2行的右侧。这意味着greet
被设置为"The world says hello dear: " + "Bob"
。1.该函数返回
greet
的值,我们跳回到第2行以完成在步骤2中开始的赋值。现在我们设置userMsg
并覆盖先前在其中设置的值,但该值已经在步骤4中使用过,因此我们没有丢失任何内容。1.返回
userMsg
的新值。第二个代码片段只是引入了一个新变量来保存
toUser(...)
调用的输出,对toUser(...)
内部发生的事情没有任何影响。jaxagkaj2#
@Ergwun已经给出了一个很好的答案。我想再增加一个Angular 来看待这个问题。你可以简单地将
return
替换为userMsg =
来“内联”函数以获得等效函数。希望这有助于澄清你的疑问。