唯品秀前端博客
当前位置: 前端开发 > JavaScript > js面试题关于js基础的那些坑你还记得多少?

在这个框架肆意的年代,前端娃是越来越淡化js基础了,很多东西也确实在工作中运用场景越来越少,但倘若面对面试,这些基础知识都是无法逃避的现实,下面记录下这几天和群里一起回炉学习的作用域相关知识。

一、关于作用域

1
2
3
4
5
6
7
8
9
10
function b() {
    console.log(a);
    var a = 10;
    function a() { };
    a = 100;
    console.log(a);
}
b();

// 结果:ƒ a() { }和100
1
2
3
4
5
6
7
8
9
10
function c() {
    console.log(a);
    function a() { };
    var a = 10;
    a = 100;
    console.log(a);
}
c();

// 结果同上,依然还是ƒ a() { }和100
1
2
3
4
5
6
7
8
var num = 99;
function d() {
    console.log(num);
    var num = 10;
}
d(100);

// 结果:undefined
1
2
3
4
5
6
7
8
var num = 99;
function d() {
    console.log(num);
    const num = 10;
}
d(100);

// 结果:Uncaught ReferenceError: Cannot access 'num' before initialization
1
2
3
4
5
6
7
(function e(num) {
    console.log(num);
    var num = 10;
    function num() { };
}(100))

// 结果:ƒ num() { }
1
2
3
4
5
6
(function e(num) {
    console.log(num);
    var num = 10;
}(100))

// 结果:100
1
2
3
4
5
6
7
var num = 100;
(function e() {
    console.log(num);
    var num = 10;
}(num))

// 结果:undefined
1
2
3
4
5
6
7
8
9
function b(x, y, z) {
    console.log(z);
    arguments[2] = 10;
    console.log(z)
}
var c = 3;
b(1, 2, c);

结果:310
1
2
3
4
5
6
7
8
9
10
function a(b) {
    var b = 100;
    console.log(b);
    function b() {}
    var b = 100;
    console.log(b);
}
a(10);

// 答案:100和100
1
2
3
4
5
6
7
8
9
function a(b) {
    console.log(b);
    function b() {}
    var b = 100;
    console.log(b);
}
a(10);

// 答案:ƒ b() { }和100
1
2
3
4
5
6
7
8
var a = 10;
function a() {
    console.log(a);
    a = 100
}
a()

// 答案:报错,a不是一个函数,因为此时a=10

二、关于this

1
2
3
4
5
6
7
8
9
10
var x = 10;
function foo() {
    console.log(x)
}
(function () {
    var x = 20;
    foo();
})()

// 答案:10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var length = 88;
function test(){
    console.log('this',this)
    console.log(this.length)
}
var obj = {
    length:99,
    action: function(test){
        test();
        arguments[0]();
    }
}
obj.action(test,1,2,3,4)

// 答案:88和5,前面this指向是window,后面this指向arguments
1
2
3
4
5
6
7
8
9
10
11
12
var length = 88;
function test(){
    console.log(this.length)
}

var obj = {
    length:99,
    action:test
}
obj.action()

// 答案:99
1
2
3
4
5
6
7
8
9
var length = 88;
function test(){
    console.log(this.length)
}

var arr = [test,1,2];
arr[0]();

// 答案:3,this指向arr

三、其它杂项

function是不是js数据类型的一种?我认为是的,虽然网上众说纷纭,但你通过typeof或者intanceof去检测可知,事实上就是真正切切存在这个类型

1
2
console.log(typeof function(){})
console.log(function(){} instanceof Function)

小结

在函数里,单纯从变量申明权重来讲,函数变量名优先级最高 > 局部变量申明 > 函数形参

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

分享到:
赞(1) 打赏
谢谢你请我吃鸡腿*^_^*

支付宝扫一扫打赏

微信扫一扫打赏

上一篇:

下一篇:

相关推荐

0 条评论关于"js面试题关于js基础的那些坑你还记得多少?"

最新评论

    暂无留言哦~~

博客简介

一个关注Web前端开发技术、关注用户体验、坚持更多原创实战教程的个人网站,梦想一旦被付诸行动,就会变得神圣,愿景:成为宇宙中最具有代表性的前端技术类博客。主题源码 

精彩评论

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

站点统计

  • 文章总数: 290 篇
  • 草稿数目: 0 篇
  • 分类数目: 15 个
  • 独立页面: 7 个
  • 评论总数: 981 条
  • 链接总数: 12 个
  • 标签总数: 483 个
  • 注册用户: 2 人
  • 访问总量: 8,826,379 次
  • 最近更新: 2021年1月25日
服务热线:
 173xxxx7240

 QQ在线交流

 旺旺在线