position: absolute和position: relative是相对什么进行定位?
See the Pen relative and absolute by zeng (@zengxiaoluan) on CodePen.
给未知宽高的元素垂直居中有哪些方法?
See the Pen Center and Center by zeng (@zengxiaoluan) on CodePen.
请输出以下函数的运行结果?
function test() {
console.log(a); //undefined
console.log(foo()); //2
var a = 1;
function foo() {
return 2;
}
}
test();
这题比较常规,没啥好说的。
var z = 10;
function foo() {
console.log(z); // 10
}
foo();
(function() {
var z = 20;
foo(); // 10
})();
(function(funArg) {
var z = 30;
funArg(); // 10
})(foo);
闭包的考察。
function createConsole() {
for (let i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // 0,1,2
}, i * 1000);
}
}
createConsole();
这题主要是作用域和作用域链的考察,函数的自执行就相当于一个闭包,所以在自执行的函数里无法改变闭包外的变量值。
var fullname = 'window';
var obj = {
fullname: 'obj',
prop: {
fullname: 'prop',
getFullname: function() {
return this.fullname;
}
}
};
console.log(obj.prop.getFullname()); // prop
var test = obj.prop.getFullname;
console.log(test()); // window
这题主要是 this 的考察,js 里 this 的值是依据执行作用域动态绑定的。
console.log(1);
setTimeout(function() {
console.log(2);
}, 0);
console.log(3); // 1, 3, 2
异步的考察
function C1(name) {
if (name) this.name = name;
}
function C2(name) {
this.name = name;
}
function C3(name) {
this.name = name || 'john';
}
C1.prototype.name = "Tom";
C2.prototype.name = "Tom";
C3.prototype.name = "Tom";
console.log(new C1().name); // tom
console.log(new C2().name); // undifined
console.log(new C3().name); // john
这个题目里面有些坑,需要注意一下,原型链的考察。
// 请实现一个函数sum,这个函数每次执行时会在控制台输出函数已经执行的次数。
// 要求:不允许有与sum同级的变量存在。
var sum = function () {
var count = 0;
return function () {
console.log(count++)
}
}
var f = sum()
f()
function fn () {
for(var i = 0; i < 4; i++) {
let timer = setTimeout(function(i, timer) {
console.log(i)
clearTimeout(timer)
}, 10, i, timer)
}
}
fn()
总结
去年我面试做这些题目的时候,还有些不知所措,如今看看觉得还挺有意思的。蹉跎岁月,总有点改变。
