腾讯电竞部门一面题目(8月20号)
感觉自己超常发挥了,面试官也比较认可自己,十有八九都回答上来了,就是对vue底层了解的不是太多,废话不多说了兄弟们,直接看题目吧,下面是我的答案,有争议的地方大家一起讨论
题目一:
请写出下面 JS 程序中几个 alert 的结果: var a = 100; function fn() { alert(a); var a = 200; alert(a); } fn(); alert(a); var a; alert(a); var a = 300; alert(a);
解释:
fn()
内部第一次alert(a)
输出undefined
,因为var a
在函数作用域内被声明(变量提升),但尚未赋值。- 第二次
alert(a)
输出200
,因为a
在函数内被赋值为200
。 - 函数外的
alert(a)
输出100
,因为a
的值在全局作用域中没有改变。 - 再次
alert(a)
输出100
,因为变量提升,var a
再次声明,但a
的值仍为100
。 - 最后一次
alert(a)
输出300
,因为a
重新赋值为300
。
题目二:
题目二 请写出以下程序的输出 var obj1 = {name: 'obj1', fn: function() { console.log(this.name); }}; var obj2 = {name: 'obj2'}; var obj3 = {name: 'obj3'}; obj1.fn(); var newFn = obj1.fn; newFn(); newFn.call(obj2); obj3.fn = newFn; obj3.fn()
解释:
obj1.fn()
输出obj1
,因为this
指向obj1
。newFn()
是直接调用函数,this
默认指向window
(或undefined
在严格模式下),所以输出undefined
。newFn.call(obj2)
使用call
方法将this
绑定到obj2
,输出obj2
。obj3.fn()
在obj3
上调用了fn
,this
指向obj3
,输出obj3
。
题目三:
有字符串 var = 'abc345efgabcab',请写出 3 条 JS 语句分别实现如下 3 个功能(使用正则): 1)去掉字符串中的a、b、c 字符,形成结果:'345efg' 2)将字符串中的数字用中括号括起来,形成结果:'abc[345]efgabcab' 3)将字符串中的每个数字的值分别乘以 2,形成结果:'abc6810efgabcab'
var str = 'abc345efgabcab';
// 1) 去掉字符串中的 a、b、c 字符
var result1 = str.replace(/[abc]/g, '');
console.log(result1); // '345efg'
// 2) 将字符串中的数字用中括号括起来
var result2 = str.replace(/\d+/g, '[$&]');
console.log(result2); // 'abc[345]efgabcab'
// 3) 将字符串中的每个数字的值分别乘以 2
var result3 = str.replace(/\d/g, (match) => match * 2);
console.log(result3); // 'abc6810efgabcab'
题目四:
console.log('a'); // 'a'
setTimeout(() => {
console.log('b'); // 'b' (最后执行)
}, 0);
console.log('c'); // 'c'
Promise.resolve().then(() => {
console.log('d'); // 'd' (微任务)
}).then(() => {
console.log('e'); // 'e' (微任务)
});
console.log('f'); // 'f'
输出顺序: 'a'
, 'c'
, 'f'
, 'd'
, 'e'
, 'b'
解释:
console.log('a')
和console.log('c')
立即执行。setTimeout
回调函数放入宏任务队列中。Promise
的then
回调放入微任务队列,先执行'd'
和'e'
。- 最后执行
setTimeout
的回调'b'
。
先整理四道题目,后面还有四道,等我有空发布,感觉有帮助的小伙伴可以点个赞,follow一下,一起进步!
#腾讯面试##第一次面试##面经深度解析##机械制造笔面经##腾讯电竞#