前端面经(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。当然也欢迎直接来找我要语雀,语雀会多一些内容。

全部评论
大佬大佬
点赞 回复
分享
发布于 03-11 17:01 陕西
[]==[]结果不是为true吗,相当于''==''
点赞 回复
分享
发布于 03-18 08:53 广东
滴滴
校招火热招聘中
官网直投
大佬这道题实在没想懂,为什么会输出undefined呢?这样调用的话fun的作用域指向window,上面var name='222'的定义为什么不是在window中定义了name属性呢 var name = "222" var a = { name: "111", say: function(){ console.info(this.name); } } var fun = a.say; fun(); // undefined
点赞 回复
分享
发布于 03-26 12:31 新加坡

相关推荐

10 23 评论
分享
牛客网
牛客企业服务