前端面经(Js习题部分)
var a = 10;
(function () {
console.log(a)
a = 5
console.log(window.a)
var a = 20;
console.log(a)})()
分别为 undefined 10 20,原因是作用域问题,在内部声名 var a = 20;相当于
先声明 var a;然后再执行赋值操作,这是在IIFE内形成的独立作用域,如果
把 var a=20 注释掉,那么 a 只有在外部有声明,显示的就是外部的A变量的值
了。结果A会是 10 10 5
使用 sort() 对数组[3, 15, 8, 29, 102, 22] 进行排序,输出结果 输出:[102, 15, 22, 29, 3, 8] 解析:根据 MDN 上对 Array.sort()的解释,默认的排序方法会将数组元素转换 为字符串,然后比较字符串中字符的 UTF-16 编码顺序来进行排序。所以'102' 会 排在 '15' 前面。
var obj = {
'2': 3,
'3': 4,
'length': 2,
'splice': Array.prototype.splice,
'push':
Array.prototype.push
}
obj.push(1)obj.push(2)console.log(obj)
结果:[,,1,2], length 为 4
伪数组(ArrayLike)
const p = new Promise(resolve => {
console.log(0) // 1
resolve()
})
p.then(res => {
console.log(1) // 2
}).then(res => {
console.log(2) // 6
}).then(res => {
console.log(3) // 7
})
p.then(res => {
console.log(4) //3
})
p.then(res => {
console.log(5) // 4
})
p.then(res => {
console.log(6) //5
})
example 1
var a={}, b='123', c=123;
a[b]='b';
a[c]='c';
console.log(a[b]);
---------------------
example 2
var a={}, b=Symbol('123'), c=Symbol('123');
a[b]='b';
a[c]='c';
console.log(a[b]);
---------------------
example 3
var a={}, b={key:'123'}, c={key:'456'};
a[b]='b';a[c]='c';
console.log(a[b]);
答:
1. 对象的键名只能是字符串和 Symbol 类型。
2. 其他类型的键名会被转换成字符串类型。
3. 对象转字符串默认会调用 toString 方法。
async function async1 () {
console.log('async1 start') // 1
await async2();
console.log('async1 end') // 5
}
async function async2 () {
console.log('async2') // 2
}
console.log('script start') // 0
setTimeout(function () {
console.log('setTimeout') // 7
}, 0)
async1();
new Promise (function (resolve) {
console.log('promise1') // 3
resolve();
}).then (function () {
console.log('promise2') // 6
})
console.log('script end') // 4
const obj = {
name : 'yy',
getInfo(){
return{
name:'ll',
getName(){
console.log(this.name)
}
}
}
}
obj.getInfo().getName() // ll
function bar() {
console.log(myName); // 快手
}
function foo() {
var myName = '快手';
bar();
}
var myName = '用户增长';
foo();
function bar() {
console.log(this.myName); // 快手
}
function foo() {
this.myName = '快手';
bar.call(this);
}
var myName = '用户增长';
foo();
v
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
前端校招面经分享 文章被收录于专栏
前端校招面经分享,包含CSS、JS、Vue、React、计算机网络、难点项目、手撕题等。这份面经总结了几乎大厂所有的面试题与牛客近几年公开的面经,可以说面试不会超出范围。 因为我只负责总结加一些个人见解,所以一开始免费开源。但互联网戾气真的重,很多人拿着面经还一副理所应当的样子质问我要语雀,还说网上同类的有很多??唉,分享不易,那我只好收费了233。当然也欢迎直接来找我要语雀,语雀会多一些内容。