Javascript 需要帮助来了解这种情况吗
我不明白为什么结果是15;有人能告诉我在这种情况下应该怎么想吗?doSomethingElse()是用参数4(a*2)调用的。它返回3。(3+2)*3=15Javascript 需要帮助来了解这种情况吗,javascript,function,Javascript,Function,我不明白为什么结果是15;有人能告诉我在这种情况下应该怎么想吗?doSomethingElse()是用参数4(a*2)调用的。它返回3。(3+2)*3=15 函数doSomething(a){ b=a+doSomethingElse(a*2); console.log('a',a,doSomethingElse(a*2)的参数); 控制台日志(b*3); } 函数doSomethingElse(a){ console.log('params b',a); 返回a-1; } var b; 剂量测
函数doSomething(a){
b=a+doSomethingElse(a*2);
console.log('a',a,doSomethingElse(a*2)的参数);
控制台日志(b*3);
}
函数doSomethingElse(a){
console.log('params b',a);
返回a-1;
}
var b;
剂量测定法(2)//15
简单一点,你给2个剂量,所以b=3+4。然后在doSomethingElse中:4-1=3,所以它返回3,所以b=2+3
而你做到了(2+3)*3=15
sumary:doSomethingElse在显示b*3之前执行,并且一个值根本没有改变,因此将doSomethingElse结果与a相加,然后将结果乘以3
有人能告诉我在这种情况下我该怎么想吗
最好的方法是使用IDE中内置的调试器和/或浏览器中内置的调试器。将代码放在一个页面中,在末尾的doSomething(2)
调用上放置一个断点,然后单步执行代码,同时观察a
和b
的值。使用调试器是一项基本技能,可以很早地学习,而不是高级技能
这里发生的是:
是全局声明的(最初具有值b
),因为undefined
声明是在范围内的任何其他声明之前处理的(有时称为“提升”)var
被调用doSomething(2)
- 它调用
其中doSomethingElse(a*2)
是a
2
返回doSomethingElse
,因为3
是a-1
是4-1
3
- 调用
时使用doSomethingElse
,因此包含该调用的行实际上是3
,其中b=a+3
仍然具有原始a
。所以2
得到b
5
输出console.log(b*3)
,因为15
是5*3
15
doSomething(2)
将值2
传递给函数doSomething(a)
因此此函数中a的值为a=2
现在你有了b=a+doSomethingElse(a*2)
和a=2
这是b=2+doSomethingElse(4)
正确吗
在doSomethingElse(a)
函数中,您将值4
传递到该函数中,因此a=4
。它返回a-1
,因此如果a=4
,它将返回3
现在回到b=2+doSomethingElse(4)
因为doSomethingElse(4)
返回3
结果是b=2+3
在下一步中,您将打印出b*3
->console.log(b*3)
,结果是15
这是因为a
的值是函数范围内的本地值,您可以检查该值以供参考:
我可能错了,但我想你可能不明白的是你打电话的时候
function doSomething(a) {
b = a + doSomethingElse(a * 2);
console.log(b * 3);
}
function doSomethingElse(a) {
return a - 1;
}
var b;
doSomething(2); //15
这部分不像“使用'a'参数执行doSomethingElse,然后将其与'a*2'相乘”。
这里发生的是将'a*2'作为参数传递,在您的场景中是4。
doSomethingElse将返回3,结果是4-1。
var b现在是5,是2+3的结果。当调用
doSomething(2)
时,您认为a
在doSomethingElse
中的值是多少?为什么?当doSomethingElse(a*2)时,另一个名为a
的变量如何
被调用?为什么结果是15
你认为它应该是什么?我的意思是,它是15,因为数学,顺便说一句,从技术上讲,调用doSomething的结果是未定义的
我仍然有兴趣知道预期的结果只是一个小的更正:doSomethingElse
被调用为4
作为参数,而不是参数。参数只是a
(顺便说一下,与doSomething
相同)。
function doSomething(a) {
b = a + doSomethingElse(a * 2);
console.log(b * 3);
}
function doSomethingElse(a) {
return a - 1;
}
var b;
doSomething(2); //15
doSomethingElse(a * 2)