Вопрос 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