极限物联网工作室前端字节面试辅导
this 和 作用域
考题1
function fn() {
return this.length + 1;
}
var length = 10;
var obj = {
length: 5,
test1: function () {
return fn();
},
};
obj.test2 = fn;
//字节经典题,下面代码输出是什么
console.log(obj.test1());
// obj.test1() => fn() => window.fn() => window.length + 1 => 10 + 1
console.log(fn() === obj.test2());
// fn() => window.fn() => window.length + 1 => 10 + 1
// obj.test2() => obj.fn() => obj.length + 1 => 5 + 1
题目2
function fun(n, o) {
console.log(o);
return {
fun: function (m) {
return fun(m, n);
},
};
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);
// undefined 0 0 0
// undefined 0 1 2
// undefined 0 1 1
题目3
let a = 1;
const function1 = function () {
console.log(a);
a = 2;
};
a = 3;
const function2 = function () {
console.log(a);
};
function1();
function2();
题目4
var a = {
b: function () {
console.log(this);
},
};
var c = a.b;
c();
题目5
let inner = 'Window';
function say() {
console.log(inner);
console.log(this.inner);
}
var obj1 = (function () {
var inner = '1-1';
return {
inner: '1-2',
say: function () {
console.log(inner);
console.log(this.inner);
},
};
})();
var obj2 = (function () {
var inner = '2-1';
return {
inner: '2-2',
say: function () {
console.log(inner);
console.log(this.inner);
},
};
})();
say(); // Window undefined
obj1.say(); // 1-1 1-2
obj2.say(); // 2-1 2-2
obj1.say = say;
obj1.say(); // Window 1-2
obj1.say = obj2.say;
obj1.say(); // 2-1 1-2
eventloop
题目1
console.log('1'); // 1
setTimeout(function () {
console.log('2'); // 5
process.nextTick(function () {
console.log('3'); // 7
});
new Promise(function (resolve) {
console.log('4'); // 6
resolve();
}).then(function () {
console.log('5'); // 8
});
});
process.nextTick(function () {
console.log('6'); // 3
});
new Promise(function (resolve) {
console.log('7'); // 2
resolve();
}).then(function () {
console.log('8'); // 4
});
setTimeout(function () {
console.log('9'); // 9
process.nextTick(function () {
console.log('10'); // 11
});
new Promise(function (resolve) {
console.log('11'); // 10
resolve();
}).then(function () {
console.log('12'); // 12
});
});
题目2
async function async1() {
console.log('async1 start'); // 2
await async2();
console.log('async1 end'); // 6
}
async function async2() {
console.log('async2'); // 3
}
console.log('script start'); // 1
setTimeout(function () {
console.log('setTimeOut'); // 8
}, 0);
async1();
new Promise(function (resolve) {
console.log('promise1'); // 4
resolve();
}).then(function () {
console.log('promise2'); // 7
});
console.log('script end'); // 5
题目3
function app() {
setTimeout(() => {
console.log("1-1");
Promise.resolve().then(() => {
console.log("2-1");
});
});
console.log("1-2");
Promise.resolve().then(() => {
console.log("1-3");
setTimeout(() => {
console.log("3-1");
});
});
}
app();
/*
1-2
1-3
1-1
2-1
3-1
*/
Promise.resolve()
.then((res) => {
setTimeout(() => {
return 3
}, 0);
return 4;
})
.then((data) => {
console.log(data);
console.log(222);
});
setTimeout
// for (var i = 0; i < 5; i++) {
// (function (i) {
// setTimeout(function () {
// console.log(i);
// }, 1000 * i);
// })(i);
// }
// for (let i = 0; i < 5; i++) {
// setTimeout(function () {
// console.log(i);
// }, 1000 * i);
// }
for (var i = 0; i < 5; i++) {
setTimeout(
function (i) {
console.log(i);
},
1000 * i,
i
);
}