Maison > interface Web > js tutoriel > Quels sont les types de fonctions en js

Quels sont les types de fonctions en js

一个新手
Libérer: 2017-10-20 11:04:43
original
1316 Les gens l'ont consulté

La fonction la plus intéressante

  有意思的根源在于- 函数也是对象,同样有拥有属性和方法。 
  由于函数是是对象,那么函数名也就相当于指向函数对象的指针
 通常函数是由"函数声明"创建:
Copier après la connexion
1 function(sum1,sum2){
2   reutnr sum1 + sum2;  
3 }
Copier après la connexion
  也可以使用"函数表达式"创建:
Copier après la connexion
1  var sum = function(sum1,sum2){
2    return sum1+sum2;
3 };
Copier après la connexion
  还有一种方式使用"构造函数"创建: (但不推荐)
Copier après la connexion
<span style="font-family: "Microsoft YaHei"; font-size: 16px">  //这种方式,会导致两次解析代码,第一次解析常规的代码,第二次解析传入构造函数中的字符串。</span><br/><span style="font-family: "Microsoft YaHei"; font-size: 16px">1 <span style="color: #0000ff">var</span> sum = <span style="color: #0000ff">new</span> Function("sum1","sum2","return sum1+sum2")</span>
Copier après la connexion
  "函数声明"与"函数表达式"的区别在于:
Copier après la connexion
  1. fonction L'expression n'a pas de nom de fonction

  2. L'expression de fonction nécessite une terminaison point-virgule

a plusieurs fonctions avec des noms de fonction

  上面提到,函数是对象,而函数名仅仅是执行函数对象的指针。
  这代表着,通过将函数名赋值给其他变量,其他变量则也可以通过自身调用该函数。  注意: 访问函数对象指针时,则需要带小括号,如上面函数访问 sum 函数的指针
           则需要将 sum 赋值给一个变量,该变量便可拥有指向同等函数的指针。    
Copier après la connexion
eg: var sum1 = sum; // sum(); sum1(); 执行的结果相同
Copier après la connexion
强调: 使用 "函数名+()",代表着调用该函数, 不添加 "()",则代表访问该"指向该函数对象的指针"
        将函数名设置为 null ,则可以使其指向的函数断绝联系。
Copier après la connexion
eg: sum = null; // sum(); 则会报错,提示sum不是一个函数, null代表着空对象指针
Copier après la connexion

ne sont pas surchargées

  相同的函数名,后者会替换前者(函数声明或者函数表达式都是如此,这里以函数声明为例子)
Copier après la connexion
eg: function sum(sum1){ return sum1+ 100 }    
function sum(sum2){ return sum2+ 200 }
    sum(100);   // 300;
Copier après la connexion

La différence entre la déclaration de fonction et l'expression de fonction

  js解析器在对于这两者是由区别的。
  函数声明的函数,在开始执行代码之前,就会通过函数声明提升的过程,读取并将函数声明添加到执行环境中。
  即使函数在调用函数后面,也不会影响函数求值。
  而函数表达式则不会,解析器必须执行到当前代码块才会被初始化并执行。如果调用在前,则
Copier après la connexion

Fonction en tant que valeur

  在JS中,函数名本身就是变量。所以函数也可以作为值来使用。
  也就是说,不仅仅可以作为一个函数的参数,也可以作为一个函数的返回值。
  而sort() 方法只能根据 tostring() 的值来排序
Copier après la connexion
eg: var data = [{name:&#39;A&#39;,age:2},{name:&#39;B&#39;,age:1}]
  // 创建指定属性的函数
   function setAttr(name){
        return function(o1,o2){
            var v1 = o1[name];
            var v2 = o2[name];
        
            if(v1 < v2) { return -1;
          }
            else if(v1 > v2) { return 1;  }
            else             { return 0;  }
        }
    }
    //使用sort()方法调用
    data.sort(setAttr(&#39;age&#39;));   // [{name,:&#39;B&#39;,age:&#39;1&#39;},{name:&#39;A&#39;,age:&#39;2&#39;}]
    data.sort(setAttr(&#39;name&#39;));  //  [{name:&#39;A&#39;,age:&#39;2&#39;},{name,:&#39;B&#39;,age:&#39;1&#39;}]
Copier après la connexion

Attributs de la fonction

  每个函数都包含两个属性: length, prototype;  length : 表示函数接收的参数个数。
Copier après la connexion
1 eg: funciont sum(test){}   //sum.lenght  == 1;
Copier après la connexion
<span style="font-family: "Microsoft YaHei"; font-size: 16px"><span style="background-color: #ffffff"><strong>   prototype:  </strong></span>在JS中,该属性是保存所有实例方法的真正所在。
  在创建自定义引用类型以及实现继承时,该属性是非常重要的。<strong><span style="background-color: #ffffff">   prototype: </span></strong>属性是不可枚举的,因此不能使用for in发现。<br/>  通过构造函数的 <strong><span style="background-color: #ffffff">prototype </span></strong>属性,创建的方法或者属性,都会被它的实例对象所继承,从而实现继承机制。<br/></span>
Copier après la connexion

Méthodes de fonction

  每个函数都包含两个非继承而来的方法: apply() 与 call();
  两者区别在于,第二个参数的不同。
  该方法强大在于,可以扩充函数赖于运行的作用域。  apply(): 第一参数是在其中运行函数的作用域,另一个是参数数组。  call()   : 第一参数是在其中运行函数的作用域,其他参数直接传递给函数,
              也就是除第一个参数,其他都是逐个列举出来。
 使用场景: 两者结果没有任何区别,而具体使用哪个,则取决于你传入的参数使用哪个方法方便。
                如果传入参数是一个数组则使用 apply 更合适一点,否则 call() 更合适一点。
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal