Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript函数参数如何在后台工作_Javascript - Fatal编程技术网

javascript函数参数如何在后台工作

javascript函数参数如何在后台工作,javascript,Javascript,我是编程新手,无法找到任何关于参数/参数的好解释,以及它们在引擎盖下是如何工作的。例如: function changeStuff(a) { return a = a * 10; } var num = 10; console.log(changeStuff(num)); //prints 100 console.log(num); //prints 10 当我调用这个changeStuff函数时,javascript如何将变量num放入参数-a中?它是否在引擎盖

我是编程新手,无法找到任何关于参数/参数的好解释,以及它们在引擎盖下是如何工作的。例如:

function changeStuff(a) {
        return a = a * 10;
      }

var num = 10;
console.log(changeStuff(num)); //prints 100
console.log(num); //prints 10
当我调用这个
changeStuff
函数时,javascript如何将变量num放入参数-a中?它是否在引擎盖下执行类似于
a=num
的操作


如果这是一个糟糕或愚蠢的问题,我很抱歉。

您需要查看编译的代码而不是解释的代码才能更好地理解它,因为您甚至不在这里处理寄存器

假设它工作与C++相同(可能类似),调用函数时,函数参数被推到当前堆栈上。然后,函数根据数量从堆栈中读取值,并读取/写入这些值

在已编译代码中,不存在“a”变量。只有有限数量的寄存器可用,因此a实际上就是其中之一。在分配该值之前,寄存器中的值将被推送到堆栈上,这样当函数结束时,寄存器就可以返回到调用函数之前正在运行的代码的前一个值


在本例中,Javascript将函数
a*10
的引用复制到变量
a
。因此
a
a*10
,因此
a*10
将被计算并返回。

参数
a
的值为
num
,即
10
。因此,该函数将计算
10*10
并返回结果。您需要查看编译后的代码,而不是解释后的代码,以便更好地理解它,因为您在这里甚至不处理寄存器。如果它与C++(类似的)工作方式相同,调用函数时,函数参数被推到当前堆栈上。然后,函数根据数量从堆栈中读取值,并读取/写入那些可能重复的@juvian值,这应该是一个答案。很好的解释。@Thielicious,所以在javascript引擎中它说的是
num=a
?它只是从我们这里抽象出来的?除了
10
是一个原始值,这些值在javascript中是通过值传递的
;如果它们像你说的那样通过引用传递,
num
var将被函数修改。a*10是一个函数。a将获得对函数a*10的引用。函数是(复杂的)对象。如果您有一个复杂类型,即使它包含基元类型,它也将通过引用传递。num将作为值传递给函数a*10中的a,return语句中的a将获得对函数的引用。谢谢,我想我必须彻底查找pass-by-value/reference,也许这将帮助我了解发生了什么