www.301.net创建方式和函数指针

ECMAScript中函数function类型,ecmascriptfunction

说起来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中上面最有意思,我想那莫过于函数了,有意思的根源,则在于函数实际上是对象…

说起来ECMAScript中上面最有意思,我想那莫过于函数了,有意思的根源,则在于函数实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数通常是使用函数声明语法定义的,如下例子:

序:说起来ECMAScript中最有意思莫过于函数—函数式对象大家都知道而函数都是Function类型的实例 而且都和其他引用类型一样都有属性和方法,对象名字都是一个指针,所以函数名其实就是一个指针(指向这个函数)不会和某个函数绑定

复制代码 代码如下:

大家有时间的可以看看引用类型技能理解上面的话(其实我也是似懂非懂)

 function sum(num1,num2)
 {
    return num1+num2;
 }

概念:

定义一次 却可以调用执行多次的一段JS代码

这与下面使用函数表达式定义函数的方式几乎相差无几。

创建方式:

1:函数声明(预解析的时候回提前哦)
function sum (num1 num2){//可以传参数是形参
return: num1+num2//每个函数都有的return属性返回值
}

2:函数表达式:
var sum=function (num1 num2){//这其实是一个匿名函数哦
return: num1+num2//每个函数都有的return属性返回值
};//记住有分号哦和申明其他变量一样

3:Function构造函数:
var sum=new Function(“num1″,”num2″,”return num1+num2”)
技术上讲这其实是一个函数表达式 不推荐使用 这个会解析2次
无论怎么样最会一个参数都会被解析成函数体而前面的参数则是新的函数的参数形参。这种方式理解<<函数是对象,函数名是指针>>更加直观(理解构造函数对于这个应该好理解)请看下面的例子:
function num(num1,num2){
return: num1+num2
}
alert(num(10,20))//30 num是指针 num是指针 num是指针
他指向这个函数(这个我也搞了很久才明白记号是指针)
var anotherNum=num
alert(another(20,20)) //40
num=null
alert(anotherNum(30,30)) //60

复制代码 代码如下:

个人解释:

num是指针赋给anotherNum anotherNum 也成为了一个指针指向函数
当num=null的时候只是num为null 函数被没有变
改的只是num这个指针所以anotherNum只是被赋予一个指针指向函数,函数不会变结果也是同样执行


 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有所帮助。

您可能感兴趣的文章:

  • js Function类型
  • js中判断Object、Array、Function等引用类型对象是否相等
  • JavaScript
    Function函数类型介绍
  • javascript中Function类型详解

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注