2016-11-04 4 views
1

In diesem Code was bedeutet undefiniert? Ohne Angabe undefiniert es sagt "mein Name ist nicht definiert, und ich bin ein undefined"Was undefiniert bezieht sich auf JavaScript-Funktion Prototyp

(function(){ 
 
    'use strict'; 
 

 
    function theFunction(name, profession) { 
 
     console.log("My name is " + name + " and I am a " + profession + " . "); 
 
    } 
 
    theFunction("John", "fireman"); 
 
    theFunction.apply(undefined,["ali", "Developer"]); 
 
    theFunction.call(undefined, "sara", "doctor"); 
 
}());

+0

See: http://stackoverflow.com/questions/5247060/in-javascript-is-there-equivalent-to-apply-that-doesnt-change-the-value- von-thi ist es so, dass du den Wert von 'this' nicht änderst. – scrappedcola

+1

_ "Ohne Angabe undefined sagt es" mein Name ist undefiniert und ich bin ein undefined "" _ Wo? – guest271314

+0

Ich denke, OP bedeutet, wenn er 'nicht definiert' als ersten Parameter hinzufügt, wenn Sie anwenden oder aufrufen. Die richtige Antwort ist unten. –

Antwort

6

Meine Antwort geht davon aus, dass durch Without specifying undefined Sie einen Anruf wie das bedeutet:

theFunction.apply(["ali", "Developer"]); 

Wenn Sie verwenden call oder apply, der erste Parameter ist der Ausführungskontext (Variable this innerhalb theFunction). Die zwei Beispiele setzen es auf undefined, so this innerhalb theFunction wird undefined auswerten. Zum Beispiel:

function theFunction(name, profession) { 
     console.log(this); // logs `undefined` 
     console.log("My name is " + name + " and I am a " + profession + " . "); 
} 

theFunction.apply(undefined, ["ali", "Developer"]); 

Here is der Erklärung Faden, warum man undefined als Ausführungskontext verwenden würde.

Nun zu Ihrer Frage. Wenn Sie weglassen undefined in Ihrem Anruf wie das ist:

theFunction.apply(["ali", "Developer"]); 

der Ausführungskontext - this - auf ["ali", "Developer"] gesetzt und name und profession als undefined ausgewertet werden, da Sie nur einen Parameter zu apply passieren, das ist, warum Sie "My name is undefined and I am a undefined"

call und apply werden normalerweise verwendet, wenn Sie den Ausführungskontext der Funktion ändern möchten. Sie verwenden wahrscheinlich apply, um Array von Argumenten in separate Argumente zu verwandeln. Um das zu tun, müssen Sie den gleichen Ausführungskontext als eine setzen, gewesen wäre, wenn Sie die Funktion aufgerufen, ohne gelten:

theFunction("John", "fireman"); // `this` points to `window` 
theFunction.apply(this, ["John", "fireman"]); // `this` points to `window` 
+2

'this' wird nie irgendwo benutzt, und der Code gibt nicht aus, was das OP sagt. – GSerg

+0

Ich wollte sagen, etwas Code würde mehr erklären, aber Sie haben mich dazu geschlagen :) –

+0

OP verwendet 'theFunction.apply ([" ali "," Entwickler "])' bei 'Javascript' bei Frage nicht. Obwohl OP vielleicht 'theFunction()' ' – guest271314

1

Obwohl theFunction() nicht enthalten ist als einer der Anrufe versucht, theFunction() reproduzieren beschriebenes Ergebnis auf Anfrage

Ohne Angabe undefined es sagt "mein Name ist nicht definiert, und ich bin ein undefined"

, das heißt, zu nennen theFunction() ohne Parameter zu übergeben; Welches Ergebnis würde erwartet werden, wo name und professionundefined innerhalb des Funktionskörpers sind, wenn theFunction aufgerufen wird.

(function() { 
 
    'use strict'; 
 

 
    function theFunction(name, profession) { 
 
    console.log("My name is " + name + " and I am a " + profession + " . "); 
 
    } 
 
    theFunction(); // logs result described at Question 
 
    theFunction("John", "fireman"); 
 
    theFunction.apply(undefined, ["ali", "Developer"]); 
 
    theFunction.call(undefined, "sara", "doctor"); 
 

 
}());

+0

dieser Aufruf 'theFunction.apply ([" ali "," Developer "]);' würde das Ergebnis erzeugen, das das OP bekommt 'Mein Name ist nicht definiert und ich bin ein undefinierter. ' –

+0

@ Maximus Bearbeitete Antwort; obwohl sowohl 'theFunction()' als auch 'theFunction.apply ([" ali "," Developer "])' nicht enthalten sind, was OP tatsächlich versucht hat. Keiner der aufgelisteten Anrufe bei Frage gibt das unter Frage beschriebene Ergebnis zurück. – guest271314

+0

Sie haben Recht. Ihre Annahme ist so möglich wie meine. Wie auch immer, ich habe Ihre Antwort aufgewertet, da sie die andere mögliche Alternative zeigt. –

Verwandte Themen