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()
总结
去年我面试做这些题目的时候,还有些不知所措,如今看看觉得还挺有意思的。蹉跎岁月,总有点改变。