Skip to content

Commit b95cb02

Browse files
committed
minor
1 parent 5f515dd commit b95cb02

5 files changed

Lines changed: 25 additions & 45 deletions

File tree

  • 1-js
    • 2-first-steps/18-function-declaration-expression
    • 3-writing-js
    • 4-data-structures/8-array-methods/1-add-class/_js.view
  • 2-ui/3-event-details/9-keyboard-events

1-js/2-first-steps/18-function-declaration-expression/article.md

Lines changed: 2 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ var sayHi = function(name) {
136136
Например, попробуем, в зависимости от условия, объявить функцию `sayHi` по-разному:
137137

138138
```js
139-
//+ run
139+
//+ run no-strict
140140
var age = +prompt("Сколько вам лет?", 20);
141141

142142
if (age >= 18) {
@@ -152,44 +152,7 @@ if (age >= 18) {
152152
sayHi();
153153
```
154154

155-
При вводе `20` в примере выше в любом браузере, кроме Firefox, мы увидим, что условное объявление не работает. Срабатывает `"До 18 нельзя"`, несмотря на то, что `age = 20`.
156-
157-
В чём дело? Чтобы ответить на этот вопрос -- вспомним, как работают функции.
158-
159-
<ol>
160-
<li>Function Declaration обрабатываются перед запуском кода. Интерпретатор сканирует код и создает из таких объявлений функции. При этом второе объявление перезапишет первое.
161-
</li>
162-
<li>Дальше, во время выполнения, объявления Function Declaration игнорируются (они уже были обработаны). Это как если бы код был таким:
163-
164-
```js
165-
function sayHi() {
166-
alert( 'Прошу вас!' );
167-
}
168-
169-
function sayHi() {
170-
alert( 'До 18 нельзя' );
171-
}
172-
173-
var age = 20;
174-
175-
if (age >= 18) {
176-
/* объявление было обработано ранее */
177-
} else {
178-
/* объявление было обработано ранее */
179-
}
180-
181-
*!*
182-
sayHi(); // "До 18 нельзя", сработает всегда вторая функция
183-
*/!*
184-
```
185-
186-
...То есть, от `if` здесь уже ничего не зависит. По-разному объявить функцию, в зависимости от условия, не получилось.
187-
</li>
188-
</ol>
189-
190-
Такое поведение соответствует современному стандарту. На момент написания этого раздела ему следуют все браузеры, кроме, как ни странно, Firefox.
191-
192-
**Вывод: для условного объявления функций Function Declaration не годится.**
155+
Function Declaration при `use strict` видны только внутри блока, в котором объявлены. Так как код в учебнике выполняется в режиме `use strict`, то будет ошибка.
193156

194157
А что, если использовать Function Expression?
195158

1-js/3-writing-js/2-coding-style/1-style-errors/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function pow(x,n)
1515

1616
x=prompt("x?",'')
1717
n=prompt("n?",'')
18-
if (n<=0)
18+
if (n<0)
1919
{
2020
alert('Степень '+n+'не поддерживается, введите целую степень, большую 0');
2121
}

1-js/3-writing-js/4-testing/3-pow-test-wrong/task.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ it("Возводит x в степень n", function() {
1111
var result = x;
1212
assert.equal(pow(x, 1), result);
1313

14-
var result *= x;
14+
result *= x;
1515
assert.equal(pow(x, 2), result);
1616

17-
var result *= x;
17+
result *= x;
1818
assert.equal(pow(x, 3), result);
1919
});
2020
```
2121

22-
P.S. Синтаксически он верен и работает, но спроектирован неправильно.
22+
P.S. Синтаксически он верен и работает, но спроектирован неправильно.

1-js/4-data-structures/8-array-methods/1-add-class/_js.view/test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ describe("addClass", function() {
2020
});
2121
});
2222

23-
it("не добавляет лишних пробелов, который уже есть", function() {
23+
it("не добавляет пробел при добавлении класса, который уже есть", function() {
2424
var obj = {
2525
className: ''
2626
};

2-ui/3-event-details/9-keyboard-events/article.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@
8080
Кросс-браузерная функция для получения символа из события `keypress`:
8181

8282
```js
83-
//+ autorun
8483
// event.type должен быть keypress
8584
function getChar(event) {
8685
if (event.which == null) { // IE
@@ -336,3 +335,21 @@ keyup
336335

337336
Их можно использовать как отдельно от событий клавиатуры, так и вместе с ними.
338337

338+
339+
[head]
340+
<script>
341+
function getChar(event) {
342+
if (event.which == null) { // IE
343+
if (event.keyCode < 32) return null; // спец. символ
344+
return String.fromCharCode(event.keyCode)
345+
}
346+
347+
if (event.which != 0 && event.charCode != 0) { // все кроме IE
348+
if (event.which < 32) return null; // спец. символ
349+
return String.fromCharCode(event.which); // остальные
350+
}
351+
352+
return null; // спец. символ
353+
}
354+
</script>
355+
[/head]

0 commit comments

Comments
 (0)