Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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_Function_Pass By Reference - Fatal编程技术网

Javascript 函数回调/复制,按值/引用传递的概念

Javascript 函数回调/复制,按值/引用传递的概念,javascript,function,pass-by-reference,Javascript,Function,Pass By Reference,我正在回顾一些基本的CS理解,但问题出现了;/在我的脑海里 我想知道是否有在“函数”上通过值或引用传递的想法 函数是JavaScript中的基本构建块之一。A. 函数是一个JavaScript过程——一组执行 任务或计算值。 -引自developer.mozilla 我目前的理解是慌乱的,当一个函数被保存时:我不理解函数是如何传递的 考虑到javascript中任何非基元类型的对象都是对象类型,代码块作为函数名的引用传递。然而,我也被告知 'Javascript总是传递值,因此更改变量的值 永远

我正在回顾一些基本的CS理解,但问题出现了;/在我的脑海里

我想知道是否有在“函数”上通过值或引用传递的想法

函数是JavaScript中的基本构建块之一。A. 函数是一个JavaScript过程——一组执行 任务或计算值。 -引自developer.mozilla

我目前的理解是慌乱的,当一个函数被保存时:我不理解函数是如何传递的

考虑到javascript中任何非基元类型的对象都是对象类型,代码块作为函数名的引用传递。然而,我也被告知

'Javascript总是传递值,因此更改变量的值 永远不要更改基础基元字符串或数字。”

那么它是按价值传递的吗?还是参考?下面是我尝试测试的案例:

function example(){
console.log('hello');
}
这里的代码块“console.log”“hello”保存到名为“example”的函数变量中

那么在

var example2 = example;
我希望函数“example”作为值传递给“example2”

所以我试图通过测试来检验我的假设是否正确:

function original(){
    console.log('hello');
}
var Original = original;
original();
Original();

function original(){
    console.log('Hello');
}
original();
Original();
我真的期望结果是

hello
hello
Hello
Hello
但实际结果是

Hello
Hello
Hello
Hello
我以为它是通过参考传递的,但读了评论后,我意识到这是一个提升问题

所以我跑了

var original = function(){
    console.log('hello');
}
var Original = original;
original();
Original();

original = function(){
    console.log('Hello');
}
original();
Original();
结果是

hello
hello
Hello
hello

这是由于使用函数声明时会发生的情况。如果使用函数表达式,则会出现预期结果:

var原始=函数{ console.log'hello'; }; var原始=原始; 原始值=5; 起初的 起初的 original=函数{//将原始值更改为指向新函数不会影响原始值 console.log'Hello'; } 起初的 起初的
console.log.Original.value;您对“原始”的第二个定义将覆盖第一个定义。当加载javascript时,函数会移动到代码的顶部,这就是为什么您可以分配函数,即使从代码编辑器的角度来看,函数可能尚未声明。我不确定是否有一种机制可以让函数移到顶部,所以可能是,一旦你得到HelloOutput 4次,Hello 4次,但我不知道是否有一个按值/引用的顺序只适用于调用函数时,它实际上并不适用于你的代码。您只需将一个函数分配给另一个变量,然后尝试将新函数重新分配给旧名称。不过,您可能对这个问题感兴趣:ECMAScript总是通过值传递,值可能是原语或对象的引用。噢,谢谢:D我刚才试过,结果是-----您好-----所以我猜函数是作为值传递的,没有影响第四个hello to'hello'@soohyeok不,错了;您正在重新分配原始变量,但original已在原始变量上具有引用function@Icepickle事实上,你们俩都是对的。引用是通过值传递的:@icepickle哦,所以基本上它是引用,原始保存到location1,原始有指向location1的指针,然后原始重新分配到location2,原始仍然有指向location1的指针?@PatrickRoberts这是一种说法^_^