说起来ECMAScript中什么最有意思,我想那莫过于函数了——而有意思的根源,则在于函数实际上是对象。每个函数都是Func tion类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数通常是使用函数声明语法定义的,如下面的例子所示:
function sum (numl, num2) {
return numl+num2;
)
用函数表达式定义函数的方式几乎相差无几:
var sum = function(uml,nurn2){
return numl + num2;}
以上代码定义了变量sum并将其初始化为一个函数。有读者可能会注意到,function关键字后面没有函数名。这是因为在使用函数表达式定义函数时,没用必要使用函数名——通过变量sum即可以引用函数。另外,还要注意函数末尾有一个分号,就像声明其他变量一样。
最后一种定义函数的方式是使用Function构造函数。Function构造函数可以接收任意数量的参数,但最后数始终都被看成是函数体,而前面的参数则枚举出了新函数的参数。来看下面的例子: var sum = new Function("numl","num2","return numl+ num2"); //南昌网站建设公司工程师不推荐
从技术角度讲,这是一个函数表达式。但是,我们不推荐读者使用这种方祛定义函数,因为这种语法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次是解析传人构造函数中的字符串)从而影响性能。不过,这种语法对于理解“函数是对象,函数名是指针”的概念倒是非常直观的。
由于函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其他变量没有什么不同。换句话说,一个函数可能会有多个名字,如下面的例子所示:
funtction sum (numl,num2){
return numl + num2;
}
alert(sum(10,10));//20
var anotherSum = sum;
alert(anotherSum(10,10)) //20
sum = null;
alert(anotherSum(10,10)) //20
以上代码先定义了一个名为sum()的函数,用于求两个值的和。然后,又声明了变量anotherSum,并将其设置为与sum相等(将sum的值赋给anotherSum)。南昌网络公司技术人员提醒需要注意的是,使用不带圆括号的函数名是访问函数指针,而非调用函数。此时,anotherSLun和sUIn就都指向了同一个函数,因此anotherSum()也可以被调用并返回结果。即使将sum设置为null、让它与函数“断绝关系”,但仍然可以正常调用anotherSum()。
希望对广大站长或网站建设公司或从事企业网站建设的团队有所帮助,如对此不太理解的,可以与南昌网络公司百恒网络技术部联系。我们很高与广大站长和网站建设公司技术人员分享我们的技术和经验。