JavaScript函数对象与Scala函数对象有何不同
How are JavaScript function objects different from Scala function objects?
在Scala中,具有两个参数的函数的类型为:
class Function2[InputTypeParameter1,InputTypeParameter2, OutputTypeParameter] {
def apply(x:InputTypeParameter1,y:InputTypeParameter2 ):OutputTypeParameter=f(x,y);
}
Function###
类有一个方法apply
。当一个方法用作函数对象时,它将变为具有apply
方法的函数对象
方法不能是Function###
对象,因为如果是,它们将有一个方法apply
,该方法将是一个Function###
对象,该方法apply
将具有。。。
JavaScript的工作方式类似吗?
javascript中的函数是什么
MDN很好地描述了功能:
在JavaScript中,函数是一流的对象,即对象,并且可以像其他对象一样进行操作和传递对象具体来说,它们是Function对象。
函数是由Function.prototype(其根是Object.protype)形成的
如何在javascript中解释函数
CCD_ 8包括方法CCD_
调用(执行)一个函数并将其this设置为所提供的值,参数可以按原样传递。
您可能已经看到过明确使用call()
来传递this
的代码,如下所示:
function speak(phrase) {
document.write(phrase + ' ' + this.name);
}
function foo() {
this.name = "Foo";
}
speak.call(foo, "Hello");
在内部,Javascript对所有函数/方法调用都使用Function.prototype.call()
方法。所以
function speak(phrase) {
document.write(phrase);
}
speak("Hello");
实际上被解释为:
function speak(phrase) {
document.write(phrase);
}
speak.call(window, "Hello");
根据ECMAScript 5,当使用严格模式时,有一个细微的变化:
speak.call(undefined, "Hello");
请注意,它没有将window
作为this
参数传递,而是传递了undefined
。
最后,当使用函数作为对象的一种"方法"时:
var speaker = {
speak: function(phrase) {
document.write(phrase);
}
}
speaker.speak("Hello");
成为
var speaker = {
speak: function(phrase) {
document.write(phrase);
}
}
speaker.speak.call(speaker, "Hello");
javascript函数与Scala函数/方法的比较
虽然我不了解Scala,但我确实查阅了一些关于apply
方法的信息,它听起来有点类似于call()
。同样根据这个其他SO答案
在发动机罩下,功能和方法。一般来说,普通方法产生的开销比函数(从技术上讲,它是一个具有应用方法的对象)。
因此,我认为javascript函数与Scala函数对象非常相似。但是javascript中的方法实际上只是函数,实际上只是对象,所以javascript方法与Scala方法不同。希望这能回答你的问题。
更新:javascript的call()
方法如何工作
call()
是使用函数对象的内部方法[[call]]
的抽象操作。内部[[call]]
方法让我们深入了解javascript代码执行的实质。我只想了解一下发生了什么:
- 执行javascript内部操作PrepareForOrdinaryCall是为了处理更多与上下文相关的内容
- 另一个内部操作OrdinaryCallBind发生这种情况。。。这设置了更多与上下文相关的内容,以及在执行过程中要使用的函数的CCD_ 22
- 执行第三个内部操作OrdinaryCallEvaluateBody。这就是实际解析、解释和执行函数体的地方
如果您想深入了解这一点,我刚才所说的所有内容都可以在EMCAScript语言规范中找到。
- 创建对象函数原型和代码是错误的
- JavaScript模块模式-如何在使用对象/函数之前激发构造函数/init函数
- 如何从onclick字符串中引用javascript对象函数
- 更改对象函数仅用于示例
- javascript和jQuery的嵌套对象函数中的变量范围
- 将对象函数传递给请求动画帧时丢失对象引用
- 对象函数返回函数而不是值
- 使用onclick调用属性对象函数
- javascript拉斐尔对象函数传递
- 如何从onClick事件调用对象函数
- 可以't获取具有“t”的对象变量;这个“;由setTimeout()函数调用的对象函数中的属性
- 对象没有't继承父对象函数
- 调用父对象函数
- "这个“;对象函数内部的引用
- 将变量添加到对象函数调用的末尾
- 传单错误:对象函数没有方法'createIcon'在LayerGroup中创建自定义图标标记时
- TypeError:对象函数Object(){〔本机代码〕}没有方法'方法'
- 挖空 - 单击绑定到对象函数 - 范围问题
- 类型错误: 对象函数...没有方法“打开”
- JavaScript 对象函数