无线传感器网络数据管理系统开发:关于JavaScript - JavaScript _ MDN外文翻译资料
2023-03-05 17:27:13
外文翻译
无线传感器网络数据管理系统开发
关于JavaScript - JavaScript _ MDN
关于 JavaScript
什么是JavaScript?
JavaScript(通常缩写为JS)是一种轻量级的、解释性的、面向对象的语言,它功能卓著,在写Web页面的脚本语言方面最为出名,但也在许多非浏览器环境中使用。它是一种基于原型的多范式脚本语言。它是动态的,并支持面向对象、命令式和功能性的编程风格。
JavaScript在网络的客户端运行,可用于设计/编程网页在事件发生时的行为。它是一个易学习、强大的脚本语言,广泛用于控制网页行为。
与通常的望文生义相反,JavaScript不是“解释Java”。简单地说,JavaScript是一种动态脚本语言,支持基于原型的对象构建。其基本语法故意与Java和C 类似,以减少学习语言所需的新概念数量。语言结构,如:if语句,for和while循环,以及switch和try ... catch块的功能与这些语言相同(或近似)。
JavaScript可以作为过程和面向对象的语言。对象以JavaScript编程方式,通过在运行时附加方法和属性来清空对象,而不是像编译语言(如C 和Java)中常见的句法类定义相反。一旦构建了一个对象,它可以用作创建类似对象的蓝图(或原型)。
JavaScript的动态函数包括运行时对象构造,可变参数列表,函数变量,动态脚本创建(通过eval),对象内省(通过for... in)和源代码恢复(JavaScript程序可以将函数体反编回源文本 )。
什么JavaScript实现可用?
Mozilla项目提供了两个JavaScript实现。 第一个JavaScript由Brendan Eich在Netscape创建,之后被更新为符合ECMA-262 Edition 5及更高版本。 这个引擎,名为SpiderMonkey的代码,是用C / C 实现的。 Rhino引擎,主要由Norris Boyd(也在Netscape)创建,是一个用Java编写的JavaScript实现。 像SpiderMonkey一样,Rhino是符合ECMA-262 Edition 5的。
一些主要的运行时优化,如TraceMonkey(Firefox 3.5),Jauml;gerMonkey(Firefox 4)和IonMonkey被添加到SpiderMonkey JavaScript引擎随着时间的推移。 工作一直在持续,以提高JavaScript执行性能。
除了上述实现之外,还有其他流行的JavaScript引擎,如:
- Google的V8,用于Google Chrome浏览器和Opera浏览器的最新版本。 这也是Node.js使用的引擎。
- 在某些WebKit浏览器(如Apple Safari)中使用的JavaScriptCore(SquirrelFish / Nitro)。
- 歌剧院旧版本的卡拉坎。
- 在Internet Explorer中使用的Chakra引擎(尽管它实现的语言被正式称为“JScript”,以避免商标问题)。
每个Mozilla的JavaScript引擎都会公开一个公共API,应用程序开发人员可以使用该API将JavaScript集成到他们的软件中。到目前为止,最常见的JavaScript主机环境是Web浏览器。 Web浏览器通常使用公共API来创建负责将DOM反射成JavaScript的主机对象。
JavaScript的另一个常见应用程序是(Web)服务器端脚本语言。 JavaScript Web服务器将暴露表示HTTP请求和响应对象的主机对象,然后可以由JavaScript程序来操作以动态生成网页。 Node.js是一个很受欢迎的例子。
JavaScript资源
SpiderMonkey
特定于Mozilla在C / C 引擎(也称为SpiderMonkey)中实现JavaScript的信息,包括如何将其嵌入到应用程序中。
Rhino
特定于使用Java编写的JavaScript实现的信息(又名Rhino)。
语言资源
指向已发布的JavaScript标准的指针。
函数 - JavaScript _ MDN
函数
函数是JavaScript中的基本构件之一。 一个函数是JavaScript过程 - 一组执行任务或计算值的语句。 要使用某个函数,您必须将其定义在您希望调用它的范围内。
定义函数
函数声明
函数定义(也称为函数声明或函数语句)由function关键字组成,后跟:
- 函数的名称。
- 函数的参数列表,括在括号中,用逗号分隔。
- 定义函数的JavaScript语句用大括号括起来{}。
例如,以下代码定义了一个名为square的简单函数:
函数square采用一个参数,称为数字。 该函数包含一个声明,返回函数的参数(即数字)自身相乘。 return语句指定函数返回的值。
原始参数(如数字)通过值传递给函数; 该值传递给该函数,但如果函数更改参数的值,则此更改不会在全局或调用函数中反映。
如果您传递一个对象(即非原始值,例如Array或用户定义的对象)作为参数,并且该函数更改对象的属性,则该更改在函数外可见,如以下示例所示:
函数表达式
虽然上面的函数声明在语法上是一个语句,但函数也可以由函数表达式创建。 这样的函数可以是匿名的; 它不必有一个名字。 例如,函数square可以定义为:
但是,一个名称可以提供一个函数表达式,并且可以在函数内部使用来引用自身,或者在调试器中用来标识堆栈跟踪中的函数:
将函数作为参数传递给另一个函数时,函数表达式很方便。 以下示例显示了一个定义的映射函数,然后使用表达式函数作为其第一个参数进行调用:
以下代码:
返回[0,1,8,125,1000]。
在JavaScript中,可以根据条件定义函数。 例如,以下函数定义仅在num等于0时定义myFunc:
除了定义这里所述的函数之外,还可以使用Function构造函数在运行时从字符串创建函数,就像eval()一样。
通话函数
定义一个函数不执行它。 定义函数只是命名函数,并指定函数调用时该做什么。 调用该函数实际上使用指定的参数执行指定的操作。 例如,如果定义函数square,可以如下所示:
前面的语句调用该参数为5的函数。该函数执行其语句并返回值25。
函数调用时必须在范围内,但可以挂起函数声明(在代码中出现在调用下方),如下例所示:
一个函数的范围是它被声明的函数,或者整个程序在顶层声明。
注意:仅当使用上述语法定义函数(即函数funcName(){})时才有效。 下面的代码将无法正常工作。 这意味着,函数提升仅适用于函数声明,而不适用于函数表达式。
函数的参数不限于字符串和数字。 您可以将整个对象传递给一个函数。 show_props()函数(在使用对象中定义)是将对象作为参数的函数的示例。
一个函数可以调用它自己。 例如,这里是递归计算阶乘的函数:
那么你可以如下计算一到五的阶乘:
还有其他方法来调用函数。 通常情况下需要动态调用函数,或函数的参数数量有所不同,或者函数调用的上下文需要设置为在运行时确定的特定对象。 事实证明,函数本身就是对象,这些对象又有方法(参见Function对象)。 其中一个,apply()方法可以用来实现这个目标。
函数范围
函数内定义的变量无法从函数外部的任何位置访问,因为变量仅在函数的作用域中定义。 但是,一个函数可以访问在定义范围内定义的所有变量和函数。 换句话说,在全局范围中定义的函数可以访问全局范围中定义的所有ariables。 在另一个函数中定义的函数也可以访问其父函数和父函数可访问的任何其他变量定义的所有变量。
范围和函数堆栈
递归
一个函数可以引用并调用自身。 函数有三种方式来引用自身:
- 函数的名称
- arguments.callee
- 一个参与该函数的范围内变量
例如,考虑以下函数定义:
在函数体内,以下是等效的:
- bar()
- arguments.callee()
- foo()
调用自身的函数称为递归函数。 在某些方面,递归类似于循环。 两者都执行相同的代码多次,并且都需要一个条件(以避免无限循环,或者在这种情况下是无限递归)。 例如,以下循环:
可以转换为递归函数和调用该函数:
然而,一些算法不能是简单的迭代循环。 例如,使用递归更容易地获得树结构的所有节点(例如DOM):
与函数循环相比,每个递归调用本身都会进行许多递归调用。
可以将任何递归算法转换为非递归算法,但通常逻辑复杂得多,因此需要使用堆栈。 实际上,递归本身使用堆栈:函数栈。
在以下示例中可以看到类似堆栈的行为:
嵌套函数和关闭
您可以在函数中嵌套函数。 嵌套(内部)函数对其包含(外部)函数是私有的。 它也形成闭合。 一个闭包是一个表达式(通常是一个函数),它可以有一个自由变量和一个环境绑定这些变量(“关闭”表达式)。
由于嵌套函数是闭包,这意味着嵌套函数可以“继承”其包含函数的参数和变量。 换句话说,内部函数包含外部函数的范围。
总结:
- 内部函数只能从外部函数中的语句访问。
- 内部函数形成一个闭包:内部函数可以使用外部函数的参数和变量,而外部函数不能使用内部函数的参数和变量。
以下示例显示了嵌套函数:
由于内部函数形成闭包,因此可以调用外部函数并为外部函数和内部函数指定参数:
保存变量
注意在内部返回时如何保存x。 闭包必须保留引用的所有范围中的参数和变量。 由于每个调用提供了潜在的不同参数,因此为每个外部调用创建一个新的闭包。 只有当返回的内部不可访问时,才能释放内存。
这与在其他对象中存储引用没有什么不同,但是通常不那么明显,因为没有直接设置引用,也不能检查它们。
多重嵌套函数
函数可以是多重嵌套的,即包含函数(C)的函数(A)的函数(A)。 这两个函数B和C都在这里形成闭包,所以B可以访问A和C可以访问B。另外,由于C可以访问能访问A的B,C也可以访问A.因此,闭包可以包含多个范围,它们递归地包含包含它的函数的范围。 这被称为范围链接。 (为什么称为“链接”将在后面解释。)
请考虑以下示例:
在这个例子中,C访问B的y和A的x。 这可以做到,因为:
- B形成包含A的闭包,即B可以访问A的参数和变量。
- C形成一个封闭包括B.
-
因为B的闭包包括A,C的闭包包括A,C可以访问B和A的参数和变量。 换句话说
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[137061],资料为PDF文档或Word文档,PDF文档可免费转换为Word