函数callbacks/copies,传递概念value/reference

Function callbacks/copies, concept of passing by value/reference

我正在复习一些基本的 CS 理解,但问题出现了;/在我脑海中。

我想知道是否有在 'functions'

上按值或引用传递的想法

Functions are one of the fundamental building blocks in JavaScript. A function is a JavaScript procedure—a set of statements that performs a task or calculates a value. -quoted from developer.mozilla

我目前的理解是函数保存时的慌乱:我不明白函数是如何传递的。

考虑到在 javascript 中任何非原始类型都是对象类型,代码块作为对函数名称的引用传递。但是,我还被告知

'Javascript always pass by value so changing the value of the variable never changes the underlying primitive (String or number).'

所以它是按值传递的吗?还是参考?所以这是我测试案例的尝试:

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

这是由于提升,当您使用函数声明时会发生这种情况。如果你使用 use 函数表达式,那么你所期望的会发生:

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

original = function(){ // changes original to point to a new function (does not affect Original)
  console.log('Hello');
}
original();
Original();
console.log( Original.value );