Abend 3: 25.05.2016 - Engineering mit JavaScript (1)
Engineering mit JavaScript (1)
Engineering mit JavaScript (1)
-
- 1 / 27
-
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.
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 :-) :
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
- 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?