Ich bin neu in der Javascript-Welt und versuche, diese Aufgabe herauszufinden, die mein Lehrer zugewiesen hat. Hier ist seine Beschreibung dessen, was erwartet wird:

  1. Erstellen Sie eine Funktion, mit der das Programm gestartet wird. Bitte nenne es start ()

  2. Rufen Sie von der Funktion start () aus eine Funktion namens getValue () auf.

  3. Die Funktion getValue () erhält vom Benutzer eine Zahl, die quadriert wird.

  4. Rufen Sie auch von der Startfunktion aus eine Funktion namens makeSquare () auf.

  5. Die Funktion makeSquare () quadriert die Zahl, die der Benutzer in der Funktion getValue () empfangen hat.

  6. Stellen Sie sicher, dass Sie die Ergebnisse der Quadratur der Zahl in der Funktion makeSquare () anzeigen.

Folgendes habe ich bisher:

function start() {

    getValue();
    getSquare();
}

function getValue() {

    var a = prompt("Number please")
}

function getSquare() {

    var b = Math.pow(a)
    document.write(b)
}

start()

Diese Zuweisung muss nicht mit HTML-Tags funktionieren. Ich habe nur die Eingabeaufforderungsbox zum Laufen, aber sonst nichts. Benutze ich Variablen auf eine Weise, die nicht verwendet werden kann?

3
user1725798 7 Okt. 2012 im 01:47

5 Antworten

Beste Antwort

Du warst nah. Es scheint jedoch, dass Sie das Scoping und die genaue Verwendung der Funktion pow nicht verstehen.

Math.pow:

Math.pow akzeptiert zwei Parameter, die Basis und den Exponenten. In Ihrem Beispiel geben Sie nur die Basis an. Dies führt zu Problemen, da die Funktion den Wert undefined zurückgibt und auf b setzt. So hätte es aussehen sollen (wenn Sie es quadrieren wollten):

Math.pow(a, 2);

Geltungsbereich:

Jede Funktion hat ihren eigenen Umfang. Sie können innerhalb der Funktion auf andere Variablen und Funktionen zugreifen, die außerhalb der Funktion erstellt wurden. Sie können jedoch nicht auf Funktionen und Variablen zugreifen, die in einer anderen Funktion erstellt wurden. Nehmen Sie das folgende Beispiel:

var c = 5;

function foo() { // we have our own scope
   var a = c; // Okay
}

var b = a; // NOT okay. a is gone after the function exits.

Wir könnten sagen, dass eine Funktion privat ist. Die einzige Ausnahme ist, dass wir einen Wert von einer Funktion zurückgeben können. Wir geben Werte mit dem Schlüsselwort return zurück. Der Ausdruck daneben ist der Rückgabewert der Funktion:

function foo() {
    return 5;
}

var a = foo(); // a === 5

foo() ruft nicht nur die Funktion auf, sondern gibt ihren Rückgabewert zurück. Eine Funktion ohne angegebenen Rückgabewert hat den Rückgabewert undefined. Wie auch immer, in Ihrem Beispiel tun Sie Folgendes:

function getValue() {
    var a = prompt("Number please")
}

Und wie folgt darauf zugreifen:

// ...
var b = Math.pow(a)

Sehen Sie den Fehler jetzt? a ist in der Funktion definiert, sodass außerhalb nicht auf sie zugegriffen werden kann.

Dies sollte der überarbeitete Code sein (Hinweis: Verwenden Sie immer Semikolons. Ich habe sie bei Bedarf für Sie eingefügt):

function start() {
    getSquare();
}

function getValue() {

    var a = prompt("Number please");
    return a;
}

function getSquare() {

    var b = Math.pow(getValue(), 2); // getValue() -> a -> prompt(...)
    document.write(b);
}

start();
5
0x499602D2 6 Okt. 2012 im 22:31

Da dies eine Hausarbeit ist, werde ich Ihnen keine direkte Antwort geben, aber hier ist ein Hinweis.

In Javascript sind Variablen Funktionen. Das bedeutet, dass var a in getValue nur dort verfügbar ist.

Sie können einen Wert aus einer Funktion return.

Funktionen sind erstklassige Objekte in Javascript, sodass Sie sie als Parameter an eine andere Funktion übergeben und schließlich innerhalb dieser Funktion aufrufen können.

0
Simon Boudrias 6 Okt. 2012 im 21:54

Benutze ich Variablen auf eine Weise, die nicht verwendet werden kann?

Ja, hier liegt Ihr Problem. Variablen in den meisten Programmiersprachen haben einen Bereich , der bestimmt, wo sie verfügbar sind. In Ihrem Fall sind a und b lokale Variablen der Funktionen getValue() bzw. makeSquare(). Dies bedeutet, dass sie außerhalb der Funktion, in der sie deklariert sind, nicht verfügbar sind.

Im Allgemeinen ist dies eine gute Sache. Sie sollten eingeschränkte Bereiche für Ihre Variablen verwenden, um den "Datenfluss" durch Ihr Programm klarer zu gestalten. Verwenden Sie Rückgabewerte und Parameter, um Daten zwischen Funktionen zu übergeben, anstatt Ihre Variablen global zu machen:

function start() {
    var a = getValue();
    makeSquare(a);
}

// Return a value entered by the user
function getValue() {
    return prompt("Number please")
}

// Write the square of the `a` parameter into the document
function makeSquare(a) {
    var b = Math.pow(a)
    document.write(b)
}
0
millimoose 6 Okt. 2012 im 22:02

Sie können dies versuchen.

<script type="type/javascript">
function start(){
makeSquare(getvalue());
}

function getvalue(){
return prompt("enter a number");
}

function makeSquare(a){
var result=Math.pow(a,2);
alert(result);
}
start();
</script>
0
kamal 26 Dez. 2012 im 00:10
  1. Ihr getValue() muss den Wert zurückgeben, damit Sie ihn dann an die Funktion getSquare() übergeben können.

  2. Meiner Meinung nach sollten Sie jede Zeile immer mit ; beenden

  3. Sie müssen wahrscheinlich die Benutzereingaben in eine Zahl analysieren. Dazu können Sie parseFloat(string) verwenden.

  4. Math.pow verwendet zwei Argumente Wenn Sie das Quadrat erhalten, müssen Sie 2 als zweites Argument übergeben, wenn Sie es aufrufen.

Ich habe Ihren Code mit einigen klarstellenden Kommentaren bearbeitet:

function start() {
    // Catch the value returned by the function
    var value = getValue();
    // Pass the returned value to the square-function
    getSquare(value);
}

function getValue() {
    // Parse the user input into a number, and return it    
    return parseFloat(prompt("Number please"));
}

// Let the square-function take the user input as an argument
function getSquare(a) {  
    // Math.pow takes a second argument, which is a number that specifies a power
    var b = Math.pow(a, 2);
    document.write(b);
}

start();

Ein anderer, weniger guter Weg

In JavaScript basiert das Scoping von Variablen auf Funktionen. Wenn eine Variable mit dem Schlüsselwort var deklariert wird, steht sie nur dieser Funktion und ihren untergeordneten Funktionen zur Verfügung. Wenn es ohne das Schlüsselwort var deklariert oder außerhalb einer Funktion deklariert wird, wird es zu einer globalen Variablen, auf die jeder auf dieser Seite ausgeführte Code zugreifen kann.

Das heißt, Sie könnten das Schlüsselwort var in der Funktion getValue() entfernen, wodurch die Variable a global würde. Sie können dann von getSquare() aus darauf zugreifen, wie Sie es in Ihrem Beispiel versucht haben.

Dies ist jedoch im Allgemeinen keine gute Idee, da Sie den globalen Namespace "verschmutzen" würden und das Risiko besteht, dass Sie versehentlich ein anderes Skript verwenden, das eine globale Variable mit demselben Namen verwendet, was zu allen möglichen Problemen führen würde Die Skripte beginnen mit derselben Variablen zu arbeiten.

0
Christofer Eliasson 6 Okt. 2012 im 22:45