typo
This commit is contained in:
parent
cd23e7d953
commit
bdb98d1ce9
5 changed files with 6 additions and 90 deletions
|
@ -181,9 +181,9 @@
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
[warn header="Либо `async` либо `defer`"]
|
[smart header="`async` вместе с `defer`"]
|
||||||
Одновременно указывать `async` и `defer` не имеет смысла, в этом случае браузер использует только `async`.
|
При одновременном указании `async` и `defer` в современных браузерах будет использован только `async`, в IE9- -- только `defer` (не понимает `async`).
|
||||||
[/warn]
|
[/smart]
|
||||||
|
|
||||||
[warn header="Атрибуты `async/defer` -- только для внешних скриптов"]
|
[warn header="Атрибуты `async/defer` -- только для внешних скриптов"]
|
||||||
Атрибуты `async/defer` работают только в том случае, если назначены на внешние скрипты, т.е. имеющие `src`.
|
Атрибуты `async/defer` работают только в том случае, если назначены на внешние скрипты, т.е. имеющие `src`.
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
Разница в поведении станет очевидной, если рассмотреть код внутри функции.
|
|
||||||
|
|
||||||
Поведение будет различным, если управление каким-то образом выпрыгнет из `try..catch`.
|
|
||||||
|
|
||||||
Например, `finally` сработает после `return`:
|
|
||||||
|
|
||||||
```js
|
|
||||||
function f() {
|
|
||||||
try {
|
|
||||||
...
|
|
||||||
*!*
|
|
||||||
return result;
|
|
||||||
*/!*
|
|
||||||
} catch (e) {
|
|
||||||
...
|
|
||||||
} finally {
|
|
||||||
очистить ресурсы
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Или же управление может выпрыгнуть из-за `throw`:
|
|
||||||
|
|
||||||
```js
|
|
||||||
function f() {
|
|
||||||
try {
|
|
||||||
...
|
|
||||||
|
|
||||||
} catch (e) {
|
|
||||||
...
|
|
||||||
if(не умею обрабатывать эту ошибку) {
|
|
||||||
*!*
|
|
||||||
throw e;
|
|
||||||
*/!*
|
|
||||||
}
|
|
||||||
|
|
||||||
} finally {
|
|
||||||
очистить ресурсы
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
В этих случаях именно `finally` гарантирует выполнение кода до окончания работы `f`, просто код не будет вызван.
|
|
|
@ -1,43 +0,0 @@
|
||||||
# Finally или просто код?
|
|
||||||
|
|
||||||
[importance 5]
|
|
||||||
|
|
||||||
Сравните два фрагмента кода.
|
|
||||||
|
|
||||||
<ol>
|
|
||||||
<li>Первый использует `finally` для выполнения кода по выходу из `try..catch`:
|
|
||||||
|
|
||||||
```js
|
|
||||||
try {
|
|
||||||
начать работу
|
|
||||||
работать
|
|
||||||
} catch (e) {
|
|
||||||
обработать ошибку
|
|
||||||
} finally {
|
|
||||||
*!*
|
|
||||||
финализация: завершить работу
|
|
||||||
*/!*
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
</li>
|
|
||||||
<li>Второй фрагмент просто ставит очистку ресурсов за `try..catch`:
|
|
||||||
|
|
||||||
```js
|
|
||||||
try {
|
|
||||||
начать работу
|
|
||||||
} catch (e) {
|
|
||||||
обработать ошибку
|
|
||||||
}
|
|
||||||
|
|
||||||
*!*
|
|
||||||
финализация: завершить работу
|
|
||||||
*/!*
|
|
||||||
```
|
|
||||||
|
|
||||||
</li>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
Нужно, чтобы код финализации всегда выполнялся при выходе из блока `try..catch` и, таким образом, заканчивал начатую работу. Имеет ли здесь `finally` какое-то преимущество или оба фрагмента работают одинаково?
|
|
||||||
|
|
||||||
Если имеет, то дайте пример когда код с `finally` работает верно, а без -- неверно.
|
|
|
@ -5,6 +5,7 @@
|
||||||
Улучшите готовый код кофеварки, который дан ниже: добавьте в кофеварку *публичный* метод `stop()`, который будет останавливать кипячение (через `clearTimeout`).
|
Улучшите готовый код кофеварки, который дан ниже: добавьте в кофеварку *публичный* метод `stop()`, который будет останавливать кипячение (через `clearTimeout`).
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
//+ run
|
||||||
function CoffeeMachine(power) {
|
function CoffeeMachine(power) {
|
||||||
this.waterAmount = 0;
|
this.waterAmount = 0;
|
||||||
|
|
||||||
|
@ -38,4 +39,5 @@ coffeeMachine.stop(); // кофе приготовлен не будет
|
||||||
```
|
```
|
||||||
|
|
||||||
P.S. Текущую температуру воды вычислять и хранить не требуется.
|
P.S. Текущую температуру воды вычислять и хранить не требуется.
|
||||||
|
|
||||||
P.P.S. При решении вам, скорее всего, понадобится добавить *приватное* свойство `timerId`, которое будет хранить текущий таймер.
|
P.P.S. При решении вам, скорее всего, понадобится добавить *приватное* свойство `timerId`, которое будет хранить текущий таймер.
|
|
@ -115,7 +115,7 @@ alert( "100 10 1".match(/\d0+/g) ); // 100, 10
|
||||||
В действии:
|
В действии:
|
||||||
```js
|
```js
|
||||||
//+ run
|
//+ run
|
||||||
alert( "0 1 12.345 7890".match(/\d+\.\d+/g) ); // 123.45
|
alert( "0 1 12.345 7890".match(/\d+\.\d+/g) ); // 12.345
|
||||||
```
|
```
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue