Heim > Web-Frontend > js-Tutorial > Hauptteil

Drei Möglichkeiten zum Erstellen von Funktionen in JS und ihre Unterschiede

PHPz
Freigeben: 2018-10-15 14:06:57
Original
1378 Leute haben es durchsucht

1. Funktionsdeklaration

function sum1(n1,n2){
    return n1+n2;
  };
Nach dem Login kopieren

2. Funktionsausdruck, auch Funktionsliteral genannt

var sum2=function(n1,n2){
    return n1+n2;
};
Nach dem Login kopieren

Beide Der Unterschied: Der Parser liest zunächst die Funktionsdeklaration und macht sie zugänglich, bevor er Code ausführt, während der Funktionsausdruck warten muss, bis der Parser die Codezeile erreicht, in der er sich befindet, bevor er tatsächlich interpretiert und ausgeführt wird.

Streng genommen wird eine selbstausführende Funktion auch als Funktionsausdruck bezeichnet. Sie wird hauptsächlich zum Erstellen eines neuen Bereichs verwendet. Die in diesem Bereich deklarierten Variablen stehen in keinem Konflikt mit Variablen in anderen Bereichen von ihnen Es existiert als anonyme Funktion und wird sofort automatisch ausgeführt.

(function(n1,n2){
    console.log (n1+n2)
})(1,3);//4
Nach dem Login kopieren

Mehrere andere selbstausführende Funktionen:

  //可用来传参
  (function(x,y){
    console.log(x+y);
  })(2,3);

  //带返回值
  var sum=(function(x,y){
    return x+y;
  })(2,3);
  console.log(sum);

  ~function(){
    var name='~'
    console.log(name);
  }();

  !function(){
    var name='!'
    console.log(name);
  }();

  ;(function(){
    var name=';'
    console.log(name);
  })();

  -function(){
    var name='-'
    console.log(name);
  }();

  //逗号运算符
  1,function(){
    var name=',';
    console.log(name);
  }();

  //异或
  1^function(){
    var name='^';
    console.log(name);
  }();

  //比较运算符
  1>function(){
    var name='>';
    console.log(name);
  }();

  ~+-!(function(){
    var name='~+-!';
    console.log(name);
  })();

  ~!(function(){
    var name='~!';
    console.log(name);
  })();

  (function(){
    var name='call';
    console.log(name);
  }).call();

  (function(){
    var name='apply';
    console.log(name);
  }).apply();
Nach dem Login kopieren

3. Funktionskonstruktionsmethode, Parameter müssen in Anführungszeichen gesetzt werden

var sum3=new Function('n1','n2','return n1+n2');
console.log(sum3(2,3));//5
Nach dem Login kopieren

Technisch gesehen ist dies ein Funktionsausdruck. Es wird im Allgemeinen nicht empfohlen, Funktionen auf diese Weise zu definieren, da diese Syntax dazu führt, dass der Code zweimal analysiert wird (das erste Mal wird der reguläre ECMAScript-Code analysiert, und das zweite Mal wird die an den Konstruktor übergebene Zeichenfolge analysiert). und somit die Leistung beeinträchtigen.

var name='haoxl';
  function fun(){
    var name='lili';
    return new Function('return name');//不能获取局部变量
  }
 console.log(fun()());//haoxl
Nach dem Login kopieren

Der Function()-Konstruktor analysiert den Funktionskörper und erstellt bei jeder Ausführung ein neues Funktionsobjekt, also beim Aufrufen von Function in einer Schleife oder bei häufig ausgeführter Funktion () Die Effizienz des Konstrukteurs ist sehr gering. Funktionsliterale werden nicht jedes Mal neu kompiliert, wenn sie mit dem Function()-Konstruktor erstellt werden. Er folgt nicht dem typischen Gültigkeitsbereich. Er führt sie immer als Funktion der obersten Ebene aus.

【Empfohlene verwandte Tutorials】

1. JavaScript-Video-Tutorial
2. JavaScript-Online-Handbuch
3 Bootstrap-Tutorial

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!