Heim >Web-Frontend >js-Tutorial >Ausführliche Erklärung von Ausdrücken und Konstruktoren im Javascript-Grundlagen-Tutorial

Ausführliche Erklärung von Ausdrücken und Konstruktoren im Javascript-Grundlagen-Tutorial

伊谢尔伦
伊谢尔伦Original
2017-07-25 10:05:281440Durchsuche

Funktionsdefinitionsausdruck

Im Ausdrucksmodus definierte Funktion, der Name der Funktion ist optional

var functionName = function([arg1 [,arg2 [...,argn]]]){
    statement;
}
var functionName = function funcName([arg1 [,arg2 [...,argn]]]){
    statement;
}

Anonyme Funktion (anonyme Funktion) wird auch Lambda-Funktion genannt ohne Bezeichner nach dem Funktionsschlüsselwort

Im Allgemeinen ist beim Definieren von Funktionen in Ausdrücken kein Name erforderlich, wodurch der Code, der sie definiert, kompakter wird. Funktionsdefinitionsausdrücke eignen sich besonders zum Definieren von Funktionen, die nur einmal verwendet werden

var tensquared = (function(x) {return x*x;}(10));

Während ein Funktionsdefinitionsausdruck einen Namen enthält, enthält der lokale Gültigkeitsbereich der Funktion einen an das Funktionsobjekt gebundenen Namen. Tatsächlich wird der Name der Funktion zu einer lokalen Variablen innerhalb der Funktion

var test = function fn(){
   return fn;
}
console.log(test);//fn(){return fn;}
console.log(test());//fn(){return fn;}
console.log(test()());//fn(){return fn;}

. Bei benannten Funktionsausdrücken entspricht der Funktionsname dem formalen Parameter des Funktionsobjekts und kann nur innerhalb verwendet werden die Funktion; Der Variablenname entspricht dem tatsächlichen Parameter des Funktionsobjekts. Er kann sowohl innerhalb als auch außerhalb der Funktion verwendet werden.

var test = function fn(){   
  return fn === test;
}
console.log(test());//true
console.log(test === fn);//ReferenceError: fn is not defined

Die Funktion definiert ein nicht standardmäßiges Namensattribut, durch das Auf den von der angegebenen Funktion angegebenen Namen kann zugegriffen werden. Der Wert dieses Attributs entspricht immer dem Bezeichner, der dem Funktionsschlüsselwort folgt. Das Namensattribut der anonymen Funktion ist leer

//IE11-浏览器无效,均输出undefined
//chrome在处理匿名函数的name属性时有问题,会显示函数表达式的名字
function fn(){};
console.log(fn.name);//'fn'
var fn = function(){};
console.log(fn.name);//'',在chrome浏览器中会显示'fn'
var fn = function abc(){};
console.log(fn.name);//'abc'

Funktionskonstruktor

Der Funktionskonstruktor empfängt eine beliebige Anzahl von Parametern, aber der letzte Parameter wird immer als Funktionskörper betrachtet und die vorherigen Parameter zählen die Parameter der neuen Funktion auf

var functionName = new Function(['arg1' [,'arg2' [...,'argn']]],'statement;');

[Hinweis] Der Funktionskonstruktor kann dies nicht Geben Sie einen Funktionsnamen an, der erstellt wird. Ist eine anonyme Funktion

Technisch gesehen ist dies ein Funktionsausdruck. Dies wird jedoch nicht empfohlen, da diese Syntax dazu führt, dass der Code zweimal analysiert wird. Das erste Mal besteht darin, den regulären Javascript-Code zu analysieren, und das zweite Mal besteht darin, die an den Konstruktor übergebene Zeichenfolge zu analysieren, was sich auf die Leistung auswirkt.

var sum = new Function('num1','num2','return num1 + num2');
//等价于
var sum = function(num1,num2){    
  return num1+num2;
}

Vom Function()-Konstruktor erstellte Funktionen werden immer kompiliert. Ausführen im globalen Maßstab. Daher ähnelt der Function()-Konstruktor dem im globalen Bereich ausgeführten eval()

var test = 0;
function fn(){
    var test = 1;
    return new Function('return test');
}
console.log(fn()());//0

[Hinweis] Nicht alle Funktionen können Konstruktoren werden

var o = new Math.min();//Uncaught TypeError: Math.min is not a constructor

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung von Ausdrücken und Konstruktoren im Javascript-Grundlagen-Tutorial. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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