Skip to content

Commit 91ce4cc

Browse files
authored
Merge pull request #54 from javascript-tutorial/sync-d35baee3
Sync with upstream @ d35baee
2 parents ba93189 + 029f8f6 commit 91ce4cc

File tree

8 files changed

+69
-22
lines changed

8 files changed

+69
-22
lines changed

1-js/02-first-steps/04-variables/article.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,17 @@ let user = 'John'
7979
, message = 'Hello';
8080
```
8181

82+
<<<<<<< HEAD
8283
Technisch gesehen machen alle diese Varianten dasselbe. Es ist also eine Frage des persönlichen Geschmacks und der Ästhetik.
8384

8485
````smart header="`var` anstatt `let`"
8586
In älteren Scripts findest du womöglich noch ein anderes Schlüsselwort: `var` anstatt `let`:
87+
=======
88+
Technically, all these variants do the same thing. So, it's a matter of personal taste and aesthetics.
89+
90+
````smart header="`var` instead of `let`"
91+
In older scripts, you may also find another keyword: `var` instead of `let`:
92+
>>>>>>> d35baee32dcce127a69325c274799bb81db1afd8
8693
8794
```js
8895
*!*var*/!* message = 'Hello';
@@ -135,8 +142,27 @@ alert(hello); // Hello world!
135142
alert(message); // Hello world!
136143
```
137144
145+
<<<<<<< HEAD
138146
```smart header="Funktionale Sprachen"
139147
Interessant ist, dass es [funktionale](https://de.wikipedia.org/wiki/Funktionale_Programmierung) Programmiersprachen wie [Scala](http://www.scala-lang.org/) oder [Erlang](http://www.erlang.org/) gibt, die das Ändern von Variablenwerten verbieten.
148+
=======
149+
````warn header="Declaring twice triggers an error"
150+
A variable should be declared only once.
151+
152+
A repeated declaration of the same variable is an error:
153+
154+
```js run
155+
let message = "This";
156+
157+
// repeated 'let' leads to an error
158+
let message = "That"; // SyntaxError: 'message' has already been declared
159+
```
160+
So, we should declare a variable once and then refer to it without `let`.
161+
````
162+
163+
```smart header="Functional languages"
164+
It's interesting to note that there exist [functional](https://en.wikipedia.org/wiki/Functional_programming) programming languages, like [Scala](http://www.scala-lang.org/) or [Erlang](http://www.erlang.org/) that forbid changing variable values.
165+
>>>>>>> d35baee32dcce127a69325c274799bb81db1afd8
140166
141167
In solchen Sprachen ist der Wert, sobald er "in der Kiste" gespeichert ist, für immer da. Wenn wir etwas anderes speichern wollen, zwingt uns die Sprache dazu, eine neue Kiste zu erstellen (eine neue Variable zu deklarieren). Wir können die alte nicht wiederverwenden.
142168
@@ -190,7 +216,11 @@ let имя = '...';
190216
let 我 = '...';
191217
```
192218
219+
<<<<<<< HEAD
193220
Technisch gesehen gibt es hier keinen Fehler, solche Namen sind erlaubt, aber es gibt eine internationale Tradition, Englisch in Variablennamen zu verwenden. Selbst wenn wir ein kleines Script schreiben, kann es ein langes Leben vor sich haben. Menschen aus anderen Ländern müssen es vielleicht irgendwann einmal lesen.
221+
=======
222+
Technically, there is no error here. Such names are allowed, but there is an international convention to use English in variable names. Even if we're writing a small script, it may have a long life ahead. People from other countries may need to read it some time.
223+
>>>>>>> d35baee32dcce127a69325c274799bb81db1afd8
194224
````
195225

196226
````warn header="Reservierte Namen"

1-js/03-code-quality/02-coding-style/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ Of course, a team can always write their own style guide, but usually there's no
285285
286286
Some popular choices:
287287
288-
- [Google JavaScript Style Guide](https://google.github.io/styleguide/javascriptguide.xml)
288+
- [Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html)
289289
- [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript)
290290
- [Idiomatic.JS](https://github.com/rwaldron/idiomatic.js)
291291
- [StandardJS](https://standardjs.com/)

1-js/03-code-quality/05-testing-mocha/beforeafter.view/test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
describe("test", function() {
2+
3+
// Mocha usually waits for the tests for 2 seconds before considering them wrong
4+
5+
this.timeout(200000); // With this code we increase this - in this case to 200,000 milliseconds
26

7+
// This is because of the "alert" function, because if you delay pressing the "OK" button the tests will not pass!
8+
39
before(() => alert("Testing started – before all tests"));
410
after(() => alert("Testing finished – after all tests"));
511

1-js/06-advanced-functions/02-rest-parameters-spread/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ So, for the task of turning something into an array, `Array.from` tends to be mo
227227
228228
## Get a new copy of an array/object
229229
230-
Remember when we talked about `Object.assign()` [in the past](https://javascript.info/object#cloning-and-merging-object-assign)?
230+
Remember when we talked about `Object.assign()` [in the past](info:object-copy#cloning-and-merging-object-assign)?
231231
232232
It is possible to do the same thing with the spread syntax.
233233

1-js/06-advanced-functions/04-var/article.md

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,18 @@ In the very first chapter about [variables](info:variables), we mentioned three
1313
2. `const`
1414
3. `var`
1515

16-
`let` and `const` behave exactly the same way in terms of Lexical Environments.
17-
18-
But `var` is a very different beast, that originates from very old times. It's generally not used in modern scripts, but still lurks in the old ones.
19-
20-
If you don't plan on meeting such scripts you may even skip this chapter or postpone it, but then there's a chance that it bites you later.
21-
22-
From the first sight, `var` behaves similar to `let`. That is, declares a variable:
16+
The `var` declaration is similar to `let`. Most of the time we can replace `let` by `var` or vice-versa and expect things to work:
2317

2418
```js run
25-
function sayHi() {
26-
var phrase = "Hello"; // local variable, "var" instead of "let"
27-
28-
alert(phrase); // Hello
29-
}
19+
var message = "Hi";
20+
alert(message); // Hi
21+
```
3022

31-
sayHi();
23+
But internally `var` is a very different beast, that originates from very old times. It's generally not used in modern scripts, but still lurks in the old ones.
3224

33-
alert(phrase); // Error, phrase is not defined
34-
```
25+
If you don't plan on meeting such scripts you may even skip this chapter or postpone it.
3526

36-
...But here are the differences.
27+
On the other hand, it's important to understand differences when migrating old scripts from `var` to `let`, to avoid odd errors.
3728

3829
## "var" has no block scope
3930

@@ -94,7 +85,27 @@ alert(phrase); // Error: phrase is not defined (Check the Developer Console)
9485

9586
As we can see, `var` pierces through `if`, `for` or other code blocks. That's because a long time ago in JavaScript blocks had no Lexical Environments. And `var` is a remnant of that.
9687

97-
## "var" declarations are processed at the function start
88+
## "var" tolerates redeclarations
89+
90+
If we declare the same variable with `let` twice in the same scope, that's an error:
91+
92+
```js run
93+
let user;
94+
let user; // SyntaxError: 'user' has already been declared
95+
```
96+
97+
With `var`, we can redeclare a variable any number of times. If we use `var` with an already-declared variable, it's just ignored:
98+
99+
```js run
100+
var user = "Pete";
101+
102+
var user = "John"; // this "var" does nothing (already declared)
103+
// ...it doesn't trigger an error
104+
105+
alert(user); // John
106+
```
107+
108+
## "var" variables can be declared below their use
98109

99110
`var` declarations are processed when the function starts (or script starts for globals).
100111

2-ui/1-document/09-size-and-scroll/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ If you click the element below, the code `elem.scrollTop += 10` executes. That m
211211
<div onclick="this.scrollTop+=10" style="cursor:pointer;border:1px solid black;width:100px;height:80px;overflow:auto">Click<br>Me<br>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9</div>
212212
```
213213

214-
Setting `scrollTop` to `0` or `Infinity` will make the element scroll to the very top/bottom respectively.
214+
Setting `scrollTop` to `0` or a big value, such as `1e9` will make the element scroll to the very top/bottom respectively.
215215
````
216216
217217
## Don't take width/height from CSS

2-ui/2-events/02-bubbling-and-capturing/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ The code sets click handlers on *every* element in the document to see which one
181181
If you click on `<p>`, then the sequence is:
182182

183183
1. `HTML` -> `BODY` -> `FORM` -> `DIV` (capturing phase, the first listener):
184-
2. `P` (target phrase, triggers two times, as we've set two listeners: capturing and bubbling)
184+
2. `P` (target phase, triggers two times, as we've set two listeners: capturing and bubbling)
185185
3. `DIV` -> `FORM` -> `BODY` -> `HTML` (bubbling phase, the second listener).
186186

187187
There's a property `event.eventPhase` that tells us the number of the phase on which the event was caught. But it's rarely used, because we usually know it in the handler.

2-ui/3-event-details/4-mouse-drag-and-drop/ball2.view/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414

1515
<script>
16-
ball.onmousedown = function(event) {s
16+
ball.onmousedown = function(event) {
1717
ball.style.position = 'absolute';
1818
ball.style.zIndex = 1000;
1919
document.body.appendChild(ball);

0 commit comments

Comments
 (0)