Size: a a a

Front-end developers

2020 May 16

vs

vadym serduk in Front-end developers
function first (){
  debugger;
  eval()
  let hello = 'hi'
  return hello
}

function SecondDecorator(func){
  let world = 'world'
  return function (){
     let result = func()
     return console.log(result + '' + world)
  }
}

first = SecondDecorator(first)
first()  Тут у меня вроде как получилось вывести 'hello ' и  'world'. Правда не совсем ясно как). За счет замыкания ?
источник

DE

Denis Evlampiev in Front-end developers
vadym serduk
function first (){
  debugger;
  eval()
  let hello = 'hi'
  return hello
}

function SecondDecorator(func){
  let world = 'world'
  return function (){
     let result = func()
     return console.log(result + '' + world)
  }
}

first = SecondDecorator(first)
first()  Тут у меня вроде как получилось вывести 'hello ' и  'world'. Правда не совсем ясно как). За счет замыкания ?
Нет, можешь убрать замыкание и без него тоже будет работать. В лексическом окружении замыкания у тебя по прежнему будет func, world и result.
let result = func() тут во время вызова func() создастся новый контекст исполнения, с лексическим окружением first. После того как вызов func() завершится, контекст переключится обратно, а результат выражения присвоится в result.
источник

vs

vadym serduk in Front-end developers
Denis Evlampiev
Нет, можешь убрать замыкание и без него тоже будет работать. В лексическом окружении замыкания у тебя по прежнему будет func, world и result.
let result = func() тут во время вызова func() создастся новый контекст исполнения, с лексическим окружением first. После того как вызов func() завершится, контекст переключится обратно, а результат выражения присвоится в result.
Точно..думаю немного разобрался. Спасибо ещё раз.
источник

DE

Denis Evlampiev in Front-end developers
vadym serduk
Точно..думаю немного разобрался. Спасибо ещё раз.
Поразбирайся, там на самом деле много интересного.
function first (){
  debugger;
  eval()
  let hello = 'hi';
  return hello
}

У тебя в дебаггере не будет показываться hello, потому что он показывает только инициализированные переменные.
На самом деле в этот момент hello уже есть в лексическом окружении. let и const всплывают так же как и var, но не инициализируются, поэтому обращение к ним до объявления вызывает ошибку. Где-то в обсуждениях спецификации читал, что const из-за своей семантики должен получать только одно значение. Поэтому const при всплытии не инициализируется со значением  undefined, чтобы потом его не перезаписывать. Для let сделали такое же поведение, чтобы они вели себя одинаково. и не вызывали путаницу.
источник

vs

vadym serduk in Front-end developers
Denis Evlampiev
Поразбирайся, там на самом деле много интересного.
function first (){
  debugger;
  eval()
  let hello = 'hi';
  return hello
}

У тебя в дебаггере не будет показываться hello, потому что он показывает только инициализированные переменные.
На самом деле в этот момент hello уже есть в лексическом окружении. let и const всплывают так же как и var, но не инициализируются, поэтому обращение к ним до объявления вызывает ошибку. Где-то в обсуждениях спецификации читал, что const из-за своей семантики должен получать только одно значение. Поэтому const при всплытии не инициализируется со значением  undefined, чтобы потом его не перезаписывать. Для let сделали такое же поведение, чтобы они вели себя одинаково. и не вызывали путаницу.
На сколько, я понял. У меня "hello" есть инициализированная.
источник

DE

Denis Evlampiev in Front-end developers
vadym serduk
На сколько, я понял. У меня "hello" есть инициализированная.
Есть только после того как выполнится let hello = 'hi'. Но дебаггер остановит выполнение скрипта, до того как она инициализируется. Хотя к этому моменту она уже всплыла и запись о ней появилась в лексичесом окружении.
function first (){
  debugger;
  eval()
  // тут к ней еще нельзя обращаться, хотя движок уже знает о ней
  let hello = 'hi';
  // после того как выполнилось объявление переменной к ней можно обращаться
  return hello
}
источник

vs

vadym serduk in Front-end developers
Denis Evlampiev
Есть только после того как выполнится let hello = 'hi'. Но дебаггер остановит выполнение скрипта, до того как она инициализируется. Хотя к этому моменту она уже всплыла и запись о ней появилась в лексичесом окружении.
function first (){
  debugger;
  eval()
  // тут к ней еще нельзя обращаться, хотя движок уже знает о ней
  let hello = 'hi';
  // после того как выполнилось объявление переменной к ней можно обращаться
  return hello
}
Ну да согласен.
источник

EF

Eugen Fisher in Front-end developers
Ребят, чего undefined получается в sum ?
https://codepen.io/bondarenkoeugen/pen/mdezwze?editors=1010
источник

DE

Denis Evlampiev in Front-end developers
Eugen Fisher
Ребят, чего undefined получается в sum ?
https://codepen.io/bondarenkoeugen/pen/mdezwze?editors=1010
return забыл
источник

EF

Eugen Fisher in Front-end developers
Лол
источник

EF

Eugen Fisher in Front-end developers
Спасибо
источник

EF

Eugen Fisher in Front-end developers
Не оно
источник

DE

Denis Evlampiev in Front-end developers
Eugen Fisher
Не оно
Оно. В reducer-е нет return-а, поэтому он возвращает undefined
https://codepen.io/codepen-store/pen/xxwyrBB
источник

EF

Eugen Fisher in Front-end developers
Действительно оно
источник

EF

Eugen Fisher in Front-end developers
Я return с новой строки написал
источник

EF

Eugen Fisher in Front-end developers
Вот и не получилось
источник

EF

Eugen Fisher in Front-end developers
Ещё раз спасибо
источник

РР

Рома Решетов... in Front-end developers
ПРивет всем! подскажите
источник

РР

Рома Решетов... in Front-end developers
как добиться такого эффекта при наведении на картинку с боку появляется увеличенная картинка
источник

EF

Eugen Fisher in Front-end developers
Можно через :hover попробовать
источник