2014-04-03 48 views
0

在JavaScript中,可能会返回一个函数作为函数的输出。JavaScript中的函数指针

我也可以归咎于变量的函数的值,像

alert1=alert; 

这是怎么回事幕后。我最好的猜测是现在alert1指向的内存中存在函数警报的代码段也是如此。是这种情况还是将整个警报代码复制到alert1,以便现在内存中存在另一个功能。

回答

3

在JavaScript中,一切不是原始(stringnumberbooleannullundefined)通过引用传递。

+0

另外,为了让OP更清楚,功能被认为是“一等公民”。 – ajp15243

+0

好的。所以我认为,函数就像其他任何对象一样是指针。 – user3490188

+0

只是为了澄清,JavaScript绝对不会通过引用传递。它总是以价值传递,即使是对象也是如此。但对于对象,它传递的值*是一个引用*。如果它是通过引用传递的,则函数makeNull(val){val = null}; makeNull(alert);'实际上会将'alert'函数的值更改为'null'。但它不会,因为'alert'是按值传递的。 –

0

答案是 '是' - 如果callThat返回一个函数,那么......

var thisThing = callThat(someVar); 
console.log(typeof thisThing); // outputs "function" 
thisThing(someParam); // call the function returned by "callThat" with a parameter 
1

是。这只是一个参考。这可能更容易用一个普通对象作为例子来说明(但它也适用于函数,因为它们也是JS中的对象)。

var obj = {foo: 'bar'}; 
var ref = obj; 

obj.foo = 'bing'; 
console.log(ref.foo); // 'bing' 

所以ref只是要obj参考。它不会复制对象。当您对obj进行更改时,它会反映在ref上,因为它的值只是对obj的引用。

+0

很酷。这是一个很好的例子。我想如果将obj1和obj2应用于函数,同样适用。 – user3490188

0

您似乎在询问实施问题。 ECMAScript对大多数数据类型和操作的实现方式没有严格的要求。只要语言按照规范行事,硬件中实际发生的事情就取决于实施。

使用函数指针实现函数对象是一种明显的方法,但它不是必需的。我们可以说,从语言的角度来看,两个变量现在都引用了相同的函数对象 - 但是如何在内存布局方面实现它在技术上取决于编写JavaScript风格的人。