javascript - 解码 JavaScript 语法 function(event) {}

标签 javascript function syntax

我刚刚在网上看到了这段 JavaScript 代码的小片段:

exampleSocket.onopen = function(event) { // rest of code here;}

我对函数(事件)部分感到相当困惑,因为没有任何注释可供我分析。 (当你设计双向双工连接时谁需要评论?哈哈)。

函数(事件)到底是什么?我一直认为你必须用 javaScript 中的函数定义一个函数名。这是错误代码的示例吗?此外,(参数-参数-无论什么)“事件”甚至没有在代码中的其他任何地方定义。只是。就在那里。是否有必要定义它,或者(事件)是一个特殊的预定义值?最后,如果您将 (event) 替换为 (e) 等其他值,代码仍然有效吗?

谢谢

最佳答案

你得到的是函数表达式,而不是函数语句。

在函数语句中,名称是必需的。在函数表达式中它是可选的。具有名称的函数表达式称为命名函数表达式。不带的函数表达式称为匿名函数

本问题涵盖的所有这些不同的函数声明方法之间存在许多细微的差异; var functionName = function() {} vs function functionName() {}


您在这里所做的是将 exampleSocketonopen 属性设置为函数(表达式)。请注意,您根本没有运行该函数;您只需声明它,并在 exampleSocket.onopen 中保存对它的引用。

这意味着某人可以在需要时通过调用执行该函数;

exampleSocket.open();

它们可以将参数传递给函数,您可以使用 event 变量在函数内部使用该参数(并回答您的问题;event 不是一个特殊的词。您可以随意调用它)。

exampleSocket.onopen = function (event) {
    console.log(event); // will log "hello"
};

exampleSocket.open("hello");

变量 event 没有在任何地方使用这一事实可能意味着开发人员已将参数命名为“嘿,看,如果您愿意,您可以使用它”,但实际上并没有在他的实际执行中。

您不必自己声明变量。它已经通过在参数列表中命名来声明,并且当有人在调用函数时传递参数时,它将初始化为一个值。


请注意,我们可以使用函数语句定义此事件处理程序;

function foo(event) {
    console.log(event);
}

exampleSocket.open = foo;

...或通过命名函数表达式:

exampleSocket.open = function foo(event) {
    console.log(event);
};

为了混淆事情(不用担心这一点;这是 JavaScript 的一个怪癖)命名函数表达式的名称只能在函数本身内部使用;

exampleSocket.open = function foo(event) {
    console.log(event);

    console.log(typeof foo); // you'll get "function"
};

console.log(typeof foo); // you'll get "undefined"

...但在函数语句中,您将能够访问内部和外部的名称。

我希望这会有所帮助......这有点像信息的“大脑转储”:)。

关于javascript - 解码 JavaScript 语法 function(event) {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20283977/

相关文章:

sql - array_agg() 函数的返回类型

JavaScript 将变量值公开

ios - 尝试注册 UICollectionViewCell 子类,但不断收到 "Cannot invoke ' registerClass' ......”

c# - C++/CLI 中 C# Array[] 的语法

javascript - Google map 上的所有标签均显示为实心框。可能出了什么问题?

javascript - 在源中播放带有井号的音频不起作用

javascript - 如何在用户点击网页中的任意位置时收到通知

c - 向 C 函数提供错误的参数类型时抛出错误/警告

syntax - LDAP 语法/语义 : Filter vs. 基本 DN?

javascript - 跨度不会在 div 中更新