在JavaScript中,可能会返回一个函数作为函数的输出。JavaScript中的函数指针
我也可以归咎于变量的函数的值,像
alert1=alert;
这是怎么回事幕后。我最好的猜测是现在alert1指向的内存中存在函数警报的代码段也是如此。是这种情况还是将整个警报代码复制到alert1,以便现在内存中存在另一个功能。
在JavaScript中,可能会返回一个函数作为函数的输出。JavaScript中的函数指针
我也可以归咎于变量的函数的值,像
alert1=alert;
这是怎么回事幕后。我最好的猜测是现在alert1指向的内存中存在函数警报的代码段也是如此。是这种情况还是将整个警报代码复制到alert1,以便现在内存中存在另一个功能。
在JavaScript中,一切不是原始(string
,number
,boolean
,null
,undefined
)通过引用传递。
答案是 '是' - 如果callThat
返回一个函数,那么......
var thisThing = callThat(someVar);
console.log(typeof thisThing); // outputs "function"
thisThing(someParam); // call the function returned by "callThat" with a parameter
是。这只是一个参考。这可能更容易用一个普通对象作为例子来说明(但它也适用于函数,因为它们也是JS中的对象)。
var obj = {foo: 'bar'};
var ref = obj;
obj.foo = 'bing';
console.log(ref.foo); // 'bing'
所以ref
只是要obj
参考。它不会复制对象。当您对obj
进行更改时,它会反映在ref
上,因为它的值只是对obj
的引用。
很酷。这是一个很好的例子。我想如果将obj1和obj2应用于函数,同样适用。 – user3490188
您似乎在询问实施问题。 ECMAScript对大多数数据类型和操作的实现方式没有严格的要求。只要语言按照规范行事,硬件中实际发生的事情就取决于实施。
使用函数指针实现函数对象是一种明显的方法,但它不是必需的。我们可以说,从语言的角度来看,两个变量现在都引用了相同的函数对象 - 但是如何在内存布局方面实现它在技术上取决于编写JavaScript风格的人。
另外,为了让OP更清楚,功能被认为是“一等公民”。 – ajp15243
好的。所以我认为,函数就像其他任何对象一样是指针。 – user3490188
只是为了澄清,JavaScript绝对不会通过引用传递。它总是以价值传递,即使是对象也是如此。但对于对象,它传递的值*是一个引用*。如果它是通过引用传递的,则函数makeNull(val){val = null}; makeNull(alert);'实际上会将'alert'函数的值更改为'null'。但它不会,因为'alert'是按值传递的。 –