for (var i = 0; i < 10; i++) {
setTimeout(() => console.log(i), 0);
}
Можно просветить собеседующих, как v8 хранит функции в памяти и почему создавать функции в цикле - это грех. А пару раз встречал, что собеседующие не знали, что setTimeout умеет передавать аргументы в свой колбэк. (~n & 1)
, чтоб не делать лишних кастов <Filter<string | string[] | undefined> //...
писать <Filter<T> //...
какой банк зарплатный (будет зарплатным банк #опа Мира Ltd. и будете мотыляться к единственному банкомату в городе)По современному законодательству работник сам вправе выбирать, на какой банк ему будут перечислять ЗП, а работодатель не в праве отказать в этом.
@Input() public album!: Album;
let formData.entries
Internet Explorer, только от Apple
В await еще не вникал
async function f() {
const start = Date.now();
const r = await {
then(cb) {
setTimeout(cb, 500, 'answer');
},
};
console.log(Date.now() - start, r);
}
ReturnMap[T]
представляет собой конкретный тип снаружи функции и обобщенный тип внутри функции, так как дженерики резолвятся в конкретные типы в момент вызова функции. TS не в состоянии сам сопоставить значение аргумента с конкретным классом, но ему можно об этом рассказать через type-guard <div className={`static${state ? ' conditional' : ''}`}></div>
<div class="static" :class="{conditional: state}"></div>
<div class="static" class:conditional={state}></div>
const Parent = ({onEvent}) => {
const myOnEvent = e => {
onEvent?.(e); // хорошо что в es2020 появился такой синтаксис, а то пришлось бы if городить
// ...
};
return <Child onEvent={myOnEvent} />;
};
const Child = ({onEvent}) => {
const onClick = e => {
onEvent?.(e);
};
return <button onClick={onClick}>click me</button>;
};
<!-- Parent -->
<Child @event="someMethod" @event="$emit('event', $event)" />
<!-- Child -->
<button @click="$emit('event', $event)">click me</button>;
<!-- Parent -->
<Child on:event={someFunction} on:event />
<!-- Child -->
<script lang="ts">
import {createEventDispatcher} from 'svelte';
// нужно из-за идеологии "тянем в бандл только то что реально используется"
const dispatch = createEventDispatcher();
</script>
<button on:click={e => dispatch('event', e)}>click me</button>;
import {useState} from 'react';
export const Switcher = ({items = []}) => {
const [selected, setSelected] = useState('');
return <>
{items.map(item => <label>
<input type="radio" checked={selected === item} onChange={() => setSelected(item)} />
{item}
</label>)}
<div>{selected}</div>
</>
};
<script>
// вот тут конечно vue проиграет...
export default {
props: {
items: {
type: Array,
default: () => [],
},
},
data() {
return {selected: ''};
},
};
</script>
<template>
<div>
<label v-for="item of items">
<!-- зато насколько проще тут -->
<input type="radio" :value="item" v-model="selected" >
{{item}}
</label>
<div>{{selected}}</div>
</div>
</template>
<script lang="ts">
export let items: string[] = [];
let selected = '';
</script>
{#each items as item}
<label>
<input type="radio" value={item} bind:group={selected} >
{item}
</label>
{/each}
<div>{selected}</div>
Это событие срабатывает только на восстановление истории измененной через методы history.
И стэк трейс будет ровно из 1 элемента - той самой функции, в которой вызван трейс.