Вопрос 1. Что выведет приведенный ниже код?

var x = 3;
var foo = {
    x: 2,
    baz: {
        x: 1,
        bar: function() {
            return this.x;
        }
    }
}
var go = foo.baz.bar;
console.log(go());
console.log(foo.baz.bar());

Вывод приведенного выше кода будет — 3 и 1

Вопрос 2. Что выведет приведенный ниже код?

var name="alex";
let name="john";
console.log(name);

Это выдаст ошибку — Uncaught SyntaxError: Идентификатор «имя» уже объявлен

Вопрос 3. Что выведет приведенный ниже код?

var Employee = {
  company: 'xyz'
}
var emp1 = Object.create(Employee);
delete emp1.company
console.log(emp1.company);

Выход будет xyz. Здесь у объекта emp1 есть компания в качестве свойства-прототипа. Оператор удаления не удаляет свойство прототипа.

Однако мы можем удалить свойство компании непосредственно из объекта сотрудника, используя команду delete Employee.company.

Вопрос 4. Что выведет приведенный ниже код?

var x = 1;
function foo() {
  var x = 2;
  bar();
}
function bar() {
  console.log(x); 
}
foo();

На выходе будет 1, потому что среда выполнения бара, подключающаяся к среде родителя, определяется при объявлении функции, а не при ее вызове.

Вопрос 5. Что выведет приведенный ниже код?

function foo(){
  let name = 'i am in foo';
  console.log(this);
  return {
    name : 'i am at object',
    f: () => this.name
  };
};
console.log(foo().f());

Вывод будет неопределенным, потому что this будет указывать на окно.

Вопрос 6. Что выведет приведенный ниже код?

function foo(){
  let name = 'i am in foo';
  console.log('foo', this);
  return {
    name : 'i am at object',
    f: function() {
      console.log('f', this);
      return this.name
    }
  };
};
console.log(foo.call({ name: 'change my context'}).f());

Вывод будет «я на объекте».

Вопрос № 7. Что выведет приведенный ниже код?

function foo(){
  let name = 'i am in foo'';
  return {
    name : 'i am at object',
    f: () => {
      return name;
    }
  };
};
console.log(foo.call({ name: 'change my context'}).f());

Вывод будет «я в foo»

Вопрос № 8. Что выведет приведенный ниже код?

function foo () {
    console.log('foo', this)
    return this;
}
var obj = {
    foo: foo,
    bar: function() {
        console.log('bar', this);
        return this;
    },
    value:1
};
console.log(obj.foo() === window); 
console.log(obj.foo() === obj);
console.log(obj.bar() === obj);

Вывод будет таким, как показано ниже —

ложный, истинный и истинный

Вопрос № 9. Что выведет приведенный ниже код?

var name = 'i am in global';
function foo () {
    return this.name;
}
var bound = foo.bind(document);
console.log(bound()); 
// => undefined
console.log(bound.call(window)); 
// => undefined
var re_bound = test.bind({name: 'i am in context'})
console.log(re_bound());

Вывод, как показано ниже,

неопределенный, неопределенный и «я в контексте».
После того, как контекст установлен с помощью привязки, вы не можете снова изменить контекст с помощью вызова.

Вопрос № 10. Что выведет приведенный ниже код?

var a = "global";
var obj = {
 method: function () {
   return {
     a: "inside method",
     normal: function() {
       return this.a;
     },
     arrowFunction: () => this.a
   };
 },
 a: "inside obj"
};
console.log(obj.method().normal());
// => inside method
console.log(obj.method().arrowFunction());
// => inside obj