函数的面试题

一.练习题1

 function fn() {
    console.log(name);
    console.log(age);
    var name = 'Linda'
    let age = 20
  }
  fn()

代码分析:

调用函数,用var声明的变量会存在变量提升的问题, 提升到当前函数的最前面,然后在打印,返回的结果是underfined。

使用let声明的变量不存在变量提升的问题,然后通过作用域链查找早外面进行查找,没有找到所有会报错。

无法在初始化之前访问“年龄”。

考点:

1.var声明的变量会存在变量提升的问题

2.还有一个就是作用域链,在当前作用域找不到就回在外层进行查找,找不到就会报错。

二.练习题2

 function fn(data) {
    if (data === {
        age: 18
      }) {
      console.log(1)
    } else if (data == {
        age: 18
      }) {
      console.log(2);
    } else {
      console.log(3);
    }

  }
  fn({age: 18})

解析:

传过的参数是一个对象,{age:18}。

对象属于引用的数据类型, 即,在栈里面存储指针,栈堆里面存贮数据。

后面比较的对象都是属于不同的地址。

那有人就要问了,==等号不是能转换吗?

转换不了,刚开始习已为常的以为能转换, 基本数据类型存在转换

所以答案是打印出3。

三.总结

为什么做这些题容易出错,还是知识点模糊,不够细心。

猜你喜欢

转载自blog.csdn.net/qq_59076775/article/details/124696006
今日推荐