8

我看到了这段代码,我挠头试图决定它是如何工作的。

<SCRIPT LANGUAGE=javascript> 

     function SpeechMikeControl::SPMEventButton(lDeviceID, EventId) {
        alert("lDeviceID=" + lDeviceID + ", EventId=" + EventId);
     }

</SCRIPT>

双冒号?这是使用来自网页的飞利浦语音麦克风。

知道这个双冒号是什么意思吗?对我来说这似乎是一个语法错误,但它有效!(至少在 IE 中)。

4

6 回答 6

7

我已经能够在Microsoft Office Infopath 2003的一些扫描手册中找到一个晦涩的参考。它似乎是一种JScript语法:

双冒号用作脚本 ID 和事件名称之间的分隔符

我的猜测是,这不是 Internet Explorer 的 ECMAScript 实现的一部分(或不再是一部分),但它属于(或曾经属于)Microsoft Office 的实现。

于 2011-04-19T11:11:25.807 回答
6

这是 Microsoft 实现的 Javascript 语言的扩展。其目的是为页面上引用的 COM 对象指定事件处理程序。 SpeechMikeControl是 COM(和/或 ActiveX)对象的全局范围名称:

  • 带有一个OBJECT或一些其他元素,其id属性为SpeechMikeControl, 或
  • SpeechMikeControl之前在 Javascript 中某处声明的全局变量

SPMEventButtonSpeechMikeControl是对象在不知道什么情况下 将引发的 COM 事件的名称。

双冒号是将函数体作为处理程序连接到控件事件的指令。

于 2011-08-25T20:10:06.013 回答
3

很确定这是一个语法错误

于 2011-04-19T10:55:43.587 回答
3

正如'::' (双冒号) 在 javascript 中做什么?

::是一个 ES2016 运算符,是 bind 的简写。这个答案旨在帮助那些::自 ES2016 规范以来遇到的人,但是,不适用于提出这个问题的上下文。

于 2016-06-29T04:06:09.293 回答
0

I'm pretty certain that's not valid Javascript syntax.

If it works in IE but not other browsers, it could possibly be that IE is treating it as another scripting language (maybe VBScript? although I don't recall that having a double colon operator either? Not sure what other language it could be though.)

于 2011-04-19T11:05:36.317 回答
0

这个问题可能不是'::'(双冒号)在 javascript 中做什么的重复?,但答案是:这是语法错误。

在下面的:

function SpeechMikeControl::SPMEventButton(lDeviceID, EventId) {

表达式开头的全局上下文中的关键字function表示函数声明。以下必须是作为函数名称的标识符。名称后面必须是开组运算符'('、形参列表和闭组运算符')'。因此,函数()之间只能是允许字符的单个标识符(不是保留字,也不是将来的保留字,但这不是问题)。

“:”(冒号)字符是标点符号,不能出现在标识符中。因此,如果将代码视为 javascript,它一定会导致语法错误。

也许 IE 对该语言有一个扩展,我对 ECMAScript 的了解不够深入,无法知道这是否允许,但我希望不会,因为它破坏其他实现。

于 2011-04-19T11:35:22.350 回答