Engineering mit JavaScript (1)


M. R.
Diese Lernkarten behandeln fortgeschrittene JavaScript-Konzepte auf Universitätsniveau und vertiefen sich in Themen wie Funktionen, Variablen, Scopes und ECMAScript-Features. Sie decken wichtige Aspekte wie den Strict Mode, Hoisting, und die Verwendung von Arrow-Funktionen ab, sowie praktische Anwendungen wie die Arbeit mit Date-Objekten und Arrays. Ideal für Studierende und Entwickler, die ihr Verständnis von JavaScript vertiefen und professionelle Coding-Praktiken anwenden möchten.
Flashcards
27
Students
13
Language
German
Category
Computer Science
Level
University
Created / Updated
12.11.2016 / 07.04.2025

Flashcards

Closure, shorthand definition

Was spuckt die Konsole aus und warum?

Beschreibung:

(function(){
  var f = e = 10;
})();

console.log("f defined? " + (typeof f !== 'undefined'));
console.log("e defined? " + (typeof e !== 'undefined'));

f defined? false
e defined? true

Grund:

Das Statement innerhalb des Closures ist eine Shorthand-Definition.

e = 10;
var f = e;

und nicht wie gerne gedacht:

var f = 10;
var e = 10;

Da e nicht mittels var definiert wurde, ist e global erreichbar, auch wenn sich e innerhalb eines Closures befindet.
Daraus ergeben sich die entsprechenden console logs.

Wie nennt sich die innerhalb der runden Klammern verwendete Syntax und wie würde der Ausdruck in ECMAScript 5 aussehen?

var data = [1,2,3,4].map(x => x*x);

Die verwendete Syntax ist bekannt als arrow function/Arrow-Funktion oder auch lambda function/Lambda-Funktion.

In ES5 würde der Ausdruck wie folgt aussehen:

var data = [1,2,3,4].map( function(x) { return x*x; } );

Was ergibt folgende Gleichung?

(8>2)*5+'px' 

typeOf() Rückgabe Werte

Was wird in der Konsole geloggt?

var b;
var c = 'a';
var typeofs = [
  [
    typeof(2 + 3),
    typeof(1 / 0),
    typeof(Number.MAX_VALUE + 1)
  ], [
    typeof(a),
    typeof(b),
    typeof(c)
  ], [
    typeof(null),
    typeof(undefined),
    typeof({})
  ]
];
console.log(JSON.stringify(typeofs));

[["number","number","number"],["undefined","undefined","string"],["object","undefined","object"]]

Worauf muss bei der Konkatenierung von JavaScript-Files in Bezug auf 'use strict' geachtet werden?

'use strict' steht am Anfang eines JavaScript-Files und gilt für das gesamte File. Bei der Konkatenierung mehrerer JavaScript-Files muss darauf geachtet werden, dass der Strict Mode nur auf Files angewandt wird, die dafür vorgesehen sind (geändertes Laufzeit-Verhalten).

Es empfiehlt sich, die Files mit und ohne Strict Mode getrennt zu konkatenieren. Zudem sollte darauf geachtet werden, dass 'use strict' im konkatenierten File nur in der ersten Zeile steht und später nicht wiederholt wird. Die meisten Concat-Utilities bieten dafür eine Option an.

Wozu werden JavaScript Compiler eingesetzt?

Um zukünftige Funktionen von JavaScript (Ecmascript), Browsern welche diese JavaScript Versionen noch nicht unterstützen zur Verfügung zu stellen

Nenne Deine drei Favoriten unter den neuen Features von ECMAScript 6.

Die neue Klassensyntax class erleichtert das objectorientierte Programmieren in JavaScript.

http://es6-features.org/#ClassDefinition

template Literals sind ein Werkzeug für die Arbeit mit Zeichenketten und ersetzen teilweise die Notwendigkeit von Template-Bibliotheken wie handlebars.js, mustache.js und Jade.

https://leanpub.com/understandinges6/read/#leanpub-auto-tagged-templates

Promises für die asynchrone Softwareentwicklung und als Alternative zu callbacks.

http://exploringjs.com/es6/ch_promises.html

Arrow Funktionen als Möglichkeit, Funktionen mit relativ wenig Boilerplate-Code zu erzeugen.

http://exploringjs.com/es6/ch_arrow-functions.html#_overview-7

let zur Variablendeklaration im block-scope.

let zahl = i;

const als Schlüsselwort für die Verwendung von Konstanten.

const MINIMUM = 3;

MINIMUM = 2;  // ohne Wirkung bzw. je nach Laufzeitumgebung Fehler

console.log (MINIMUM); //3

Dies ist eine Auswahl, man kann auch ein Buch über das Thema schreiben :-)  :

http://exploringjs.com/es6

Was gibt die Funktion "toString()" zurück?

toString() gibt den Source Code von der Funktion zurück.

Beispiel:

function sayHi(name){
   return "Hi " +name;
}

sayHi.toString() -> function sayHi(name){\r\n return "Hi " + name; \r\n}"

Was versteht man unter einem Scope und welche Arten gibt es?

Scope

Unter einem "Scope" versteht man die Sichtbarkeit von Variablen und Funktionen resp. deren Geltungsbereich

 

Arten von Scope

1. Variable im globalen Scope

  • Ohne «var»
  • Im Browser über window.myGlobalVariable zugreifbar. In node.js: global.myGlobalVariable

2. Variablen im lokalen / Funktionen Scope

  • Benötigt ein «var»
  • Nur innerhalb des Scopes zugreifbar oder dessen «nested» Scopes
  • Closures

3. «Module Scope»: (node.js)
Node.js erzeugt pro File ein neuen Scope => Nicht explizit globale Variablen werden auf diesen gelegt. Dieser ist File basiert.

4. «Block Scopes»

  • Mit ECMA6 möglich
  • ‘usestrict’ Modus notwendig
  • «let» als neues Keyword

Was für ein Fehler beinhaltet folgender Code?

function createGuid(){
    return   
    {
        guid: "936DA01F-9ABD-4D9D-80C7-02AF85C822A8"
    }
}

A semicolon is inserted at the end, when a statement with restricted productions in the grammar is followed by a line terminator.

Das return Statement wird mit dem nächsten“line terminator” beendet. Somit wird kein Guid objekt zurück gegeben.

http://people.mozilla.org/~jorendorff/es6-draft.html#sec-rules-of-automatic-semicolon-insertion

Welches Resultat ergibt folgender Ausdruck?

 

Ausdruck:

NaN == NaN

Was bezweckt der Strict Mode ('use strict')? Nenne 3 Beispiele

  • Die Security wird leicht verbessert
  • Lässt "unbeabsichtigte" globale Variablendefinitionen nicht mehr zu
  • Wertzuweisungen auf Read-Only Variablen (bsp. NaN) sind nicht mehr möglich
  • Die Bezeichnungen der Funktionsparameter müssen in diesem Modus unique definiert sein
  • Einige ECMAScript 6 Funktionen setzen den Strict Mode voraus

 

Was ist im JavaScript mit "Hoisting" gemeint?

JavaScript verschiebt automatisch alle Deklarationen von Methoden / Variablen an den Anfang des Scopes.


ACHTUNG:

    Initialisierungen werden NICHT ge-«hoisted». Es wir nur die Deklaration der Variablen ge-«hoisted».
    Bei einer «Function-Expressions» wird die Zuweisung nicht verschoben.
    «let» Variablen sind vom Hoisting nicht betroffen


BEISPIEL:

"use strict";
var a
a = 1;
console.log("0",a);

ist dasselbe wie:

"use strict";
a = 1;
console.log("0",a);
var a;

Was gibt typeof(2/0) aus?

Welche der beiden Aufrufe der Funktion bar() funktionieren?

a)  function foo() { bar(); function bar() {…} }

b)  function foo() { bar(); var bar = function() {…} }

 

Lösung: a)

 

Beschreibung:

Hoisting von Funktionsdeklarationen funktioniert; Hoisting von Funktionszuweisungen bei Variablendeklarationen nicht.

Beim Aufruf von bar() in b) ist zwar die Variable bar bekannt, aber die Funktion noch nicht zugewiesen.

How do you remove a property from an object?

What does the following code evaluate to?

var arr = [1, 2, 3, 4];

arr.indexOf(2);

What is the value of x after the following code runs?

var x;

x++;

Based on the following, what is the protoype chain for a?

var a = ["well","hello","there", "."];

Which of the following will create a copy of an array such that changes to the old array will not be reflected in the new array?

What happens when the following code is executed?

function foo() {

  this.me = "hello";

}

var x = foo();

console.log(x.me);

What will console.log(typeof([1,2]) print out?

Which of these return a valid instance of the Date object?

Given the following, what is the value of x?

var x = typeof new String("abc");

What is the correct syntax for creating a Date object for January 10, 1998?

Which standard Javascript method would truncate Math.PI to 3.14?

Which symbol is not used in logical operations?

Study