欢迎您访问我爱IT技术网,今天小编为你分享的javascript教程:【ECMAScript中函数function类型】,下面是详细的讲解!
ECMAScript中函数function类型
说起来ECMAScript中上面最有意思,我想那莫过于函数了,有意思的根源,则在于函数实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数通常是使用函数声明语法定义的,如下例子:
function sum(num1,num2)
{
return num1+num2;
}
这与下面使用函数表达式定义函数的方式几乎相差无几。
var sum=function(num1,num2)
{
return num1+num2;
};
以上代码定了变量sum并将其初始化为一个函数。你们会注意到,function关键字后面没有函数名。这是因为在使用函数表达式定义函数时,没有必要使用函数名(通过变量sum既可以引用函数)。另外,还要注意函数末尾有一个分号,就像声明其他变量时一样。
最后一种定义函数的方式是使用Function构造函数。Function构造函数可以接受任意数量的参数,但最后一个参数始终都会被看成函数体,而前面的参数则枚举出了新函数的参数。如下例子:
var sum=new Function("num1","num2","return num1+num2");//不推荐
从技术角度讲,这是一个函数表达式。但是,我们不推荐使用这种方法定义函数, 因为这种语法会导致解析两次代码(第一次解析常规的ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。不过,这种语法对于理解“函数是对象,函数名是指针”的概念都是非常直观的。
由于函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其他变量没有什么不同。换句话说,一个函数可能会有多个名字,如下例子:
function sum(num1,num2)
{
return num1+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)。注意,使用不带圆括号的函数名是访问函数指针,而非调用函数。此时,anotherSum和sum 就指向了同一个函数,因此anotherSum()也可以被调用并返回结果。即使将sum设置为null,让它与函数“断绝关系”,但仍然可以证明正常调用anotherSum()。
以上所述就是本文的全部内容了,希望能够对大家学习javascript有所帮助。
关于ECMAScript中函数function类型的用户互动如下:
相关问题:javascript Function的原型对象为什么是空函数
答:你可以换成是这样会好理解一点。 Function.prototype=empty; function empty(){} empty指向的是函数,Function.prototype当然也是函数。 alert(Function); alert(Object); alert(Object.constructor+":"+Function.constructor);//发现都是由函数... >>详细
相关问题:动态函数的作用是什么呢
答:1.有助于你理解函数不过是一种引用类型,他们的行为与你调用其他类创建对象的行为相同 2.所有的函数(包括你后来声明的那种)都是Function类的实例,这是ECMAScript中规定的(JavaScript,Flash的ActionScript都以这个标准为基础设计的) 3.这种... >>详细
相关问题:javascript中的工厂模式和构造函数有什么区别?
答:虽然Object构造函数或对象字面量都可以创建单个对象,但是这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量重复的代码。为了解决这个问题,就可以使用工厂模式来创建对象。 1.工厂模式: 在ECMAScript中是无法创建类的,开发人... >>详细
- 【firefox】firefox浏览器不支持innerText的解决
- 【Extjs】Extjs学习过程中新手容易碰到的低级错误
- 【clearInterval】js clearInterval()方法的定义
- 【dom】javascript dom追加内容实现示例-追加内容
- 【checkbox】让checkbox不选中即将选中的checkbox
- 【Array】js中更短的 Array 类型转换-类型转换
- 【append】append和appendTo的区别以及appendChil
- 【ExtJs】ExtJs 表单提交登陆实现代码-表单提交-
- 【ajax清除浏览器缓存】Ajax清除浏览器js、css、
- 【addClass】javascript自定义的addClass()方法
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
