js--常见面试题


  • 微信扫码关注公众号 :前端前端大前端,追求更精致的阅读体验 ,一起来学习啊
  • 关注后发送关键资料,免费获取一整套前端系统学习资料和老男孩python系列课程
    在这里插入图片描述

学习资源推荐 - 学习资源推荐 https://blog.csdn.net/qq_42813491/article/details/90213353

js--常见面试题

    • demo1-变量声明提升与初始化
    • demo2-块级作用域
    • demo3 -箭头函数this指向
    • demo4-- 类型转换
    • demo5--浅拷贝
    • demo6 --全等与等的差异
    • demo7--静态方法,构造方法,默认值
    • demo8-- 全局属性
    • demo9 --函数也是对象

demo1-变量声明提升与初始化

function sayHi() {
    console.log(name);
    console.log(age);
    var name = "Lydia";
    let age = 21;
  }
  
  sayHi();
  • 输出: undefined age is not defined
  • 解析:var,let都存在声明提升,但前者会初始化赋值undefined,后者不会,且let存在暂时性死区,未声明变量不可使用

demo2-块级作用域

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}
  • 输出: 333 012
  • 解析:var定义的变量全局有效,回调执行时i只有一个,即全局的i,为3.let每次循环都定义一个新值,存在块级作用域,每次回调得到的i都是不同的

demo3 -箭头函数this指向

const obj = {
  number: 10,
  f1() {
    return this.number * 2
  },
  f2: () => 2 * this.number
}

console.log(obj.f1())
console.log(obj.f2())
  • 输出: 20 NaN
  • 解析:箭头函数中的this指向并非当前对象,而是执行上下文对象,浏览器的window,node中的{}

demo4-- 类型转换

console.log(+true);
console.log(!"hello");
  • 输出: 1 false
  • 解析:+ 进行number转换,true转为1,false转为0,字符串不为空真值为true,取反为false

demo5–浅拷贝

let obj1 = { name: 'TOM' }
let obj2 = obj1
obj1.name = 'JACK'
console.log(obj2.name)
  • 输出: JACK
  • 解析:简单赋值相当于复制一份引用,两个对象本质指向内存中同一个地址,一变皆变

demo6 --全等与等的差异

let a = 3
let b = new Number(3)

console.log(a == b)
console.log(a === b)

  • 输出: **true false **
  • 解析:==只比较值,===比较值和类型,new Number()本质是个对象,而不是基本类型number

demo7–静态方法,构造方法,默认值

class Obj {
  static getColor(color='green') {
    
    return color
  }

  constructor(color='blue') {
    this.color = color
  }
}


console.log(new Obj('red').color)
console.log(new Obj().color)
console.log(Obj.getColor())
console.log(Obj.getColor('black'))
console.log(new Obj.getColor())
  • 输出: red blue green black error
  • 解析:静态方法实例不可用,默认值在不传参情况下生效

demo8-- 全局属性

let a
b={}
console.log(b)//{}

js--常见面试题_第1张图片

  • 不加变量声明提示符定义出的变量是隐式全局变量

demo9 --函数也是对象

function fn() {
  console.log('hello')
}
fn.text = 'world'
fn()
console.log(fn.text)
  • 输出: hello world
  • 解析:函数本身也是对象,为它设置属性并访问,完全符合逻辑
    js--常见面试题_第2张图片

你可能感兴趣的:(js)