likes
comments
collection
share

4个面试必问的区别

作者站长头像
站长
· 阅读数 8

1、箭头函数和普通函数的区别

  • 箭头函数和普通函数的样式不同,箭头函数语法更加简洁、清晰,箭头函数是=>定义函数,普通函数是function定义函数。
  • 箭头函数会捕获其所在上下文的 this 值,作为自己的 this 值,定义的时候就确定并固定了。
  • 箭头函数不能作为构造函数使用,也不能使用new关键字(因为箭头函数没有自己的this,它的this其实是继承了外层执行环境中的this,且this指向永远不会改变,作为构造函数其的this要是指向创建的新对象)。
  • 箭头函数没有自己的arguments。在箭头函数中访问arguments实际上获得的是外层局部(函数)执行环境中的值。
  • call、apply、bind 并不会影响其 this 的指向。
  • 箭头函数没有原型prototype。
  • 箭头函数不能当作 Generator 函数,不能使用 yield 关键字。

2、var,let和const之间的区别

变量提升方面

  • var声明的变量存在变量提升,即变量可以在声明之前调用,值为undefined。
  • let和const不存在变量提升问题(注意这个‘问题’后缀,其实是有提升的,只不过是let和const具有一个暂时性死区的概念,即没有到其赋值时,之前就不能用),即它们所声明的变量一定要在声明后使用,否则报错。 块级作用域方面: var不存在块级作用域,let和const存在块级作用域 声明方面:
  • var允许重复声明变量
  • let和const在同一作用域不允许重复声明变量。
  • const声明一个只读的常量(声明时一定要赋值,不然报错)。一旦声明,常量的值就不能改变。但是如果const声明了一个对象,对象里的属性是可以改变的。

3、基本数据类型和引用数据类型的区别

基本数据类型:

  • 基本数据类型的值是不可变的(重新赋值属于改变属性名的指向了,而不是对值进行操作)。
  • 基本数据类型不可以添加属性和方法,虽然不会报错,但也只是一瞬间转为了相应包装对象,操作完又转化回原基本数据类型,不会保存结果。
  • 基本数据类型的赋值是简单赋值,基本数据类型的比较是值的比较。
  • 基本数据类型是存放在栈区的

引用数据类型:

  • 引用类型的值是可以改变的,例如对象就可以通过修改对象属性值更改对象。
  • 引用类型可以添加属性和方法。
  • 引用类型的赋值是对象引用,即声明的变量标识符,存储的只是对象的指针地址。
  • 引用类型的比较是引用(指针地址)的比较。
  • 引用类型是同时保存在栈区和堆区中的,栈区保存变量标识符和指向堆内存的地址。

4、cookies和session的区别

  • 存储位置不同:cookie的数据信息存放在客户端浏览器上,session的数据信息存放在服务器上。
  • 存储容量不同:单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie,而对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。
  • 存储方式不同:cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。
  • 隐私策略不同:cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的,而session存储在服务器上,对客户端是透明的,不存在敏感信息泄漏的风险。
  • 有效期上不同:开发可以通过设置cookie的属性,达到使cookie长期有效的效果。session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。
  • 服务器压力不同:cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。
  • 跨域支持上不同:cookie支持跨域名访问(二级域名是可以共享cookie的)。session不支持跨域名访问。