JS基础及JS常见的面试题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43841301/article/details/101030772

一、js的数据类型

      主要分为:基本数据类型和复杂数据类型
   1.基本数据类型:undefined,Strng,number,boolean,Null
   2.复杂数据类型:object(包含三种引用类型)
   3.值类型:基本数据类型
   4.引用类型:对象,数组,函数
  a、typeof  可以区分的值类型
          object、number、function、boolean、undefined、string
  b、判断一个变量是否为一个数组
          instanceof  Array
  c、按照存储方式的划分
           存储在栈中:值类型
           存储在堆中:引用类型
  d、null和undefind的区别
       1、null表示“无”的对象,转化为数值时是0
             undefined表示“无”的原始值、转换为数值时为NaN
       2、当声明变量还未初始化时,变量的默认值为undefined
       3、null用来表示尚未存在的对象
       4、null和undefined的值相等,但类型不同
   e、值类型与引用类型的区别
        值类型:值不会随着变化而变化
        引用类型:创建的对象会随着变化而变化(存在同一个内存中)

二、JS三部分

  ECMAScript:js语法
  DOM:文档对象模型,操作html文档的工具
  BOM: 浏览器对象模型 操作浏览器的工具

三、JS闭包

   闭包是指函数和声明该函数的此法环境的组合(内部函数可以调用外部函数的变量或者数据)
   使用闭包主要是为了设计私有的方法和变量,参数和变量不会被垃圾回收机制回收
   在实际应用中主要用于封装变量,收敛权限
优点:可以避免全局变量的污染;
缺点:闭包会常驻内存、增大内存的使用量,使用不当就会造成内存泄漏
应用场景:作为 返回值、作为参数传递

四、JS实现对象的继承

  1.借用构造函数实现继承(部分继承)
 如果父类的属性都在构造函数内,就会被子类继承
 如果父类的原型对象上啊有方法,子类不会被继承
  2.借助原型链实现继承
 构造函数的实例可以访问到它的原型对象是哪个
 缺点:原型链上的原型对象,是公用的。
   3.组合方式(原型链+构造函数)
 使用原型链实现对原型属性和方法的继承,通过构造函数来实现对实例属性的继承。

五、JS对象

   JS中的对象主要分为:自定义对象,内置对象,浏览器对象
 1.自定义对象、内置对象是js基础内容,属于ECMAScript;浏览器对象属于js独有
 2.内置对象值js语言自带的对象,供开发者使用,提供一些常用的,最基本必要的功能。(属性和方法)
 3.js提供多个内置对象:Math,Date,Array,String等

六、JS作用域

 1.作用域:变量起作用的范围
 2.作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少名字的冲突
 3.js(es6前)中的作用域有俩种:
     全局作用域(函数外部)
     局部作用域(函数内部)(函数作用域)
     js目前没有块级作用域,块级作用域由{}包括
  4.全局作用域:整个script标签内部或者一个独立的js文件
  5.局部作用域(函授作用域):作用于函授内的代码环境

七、日期对象

  1.获取当前时间必须实例化(为中国标准时间)
    var now =new Date();
    如果()不写参数,就返回当前时间
    如果()写参数,就返回括号里输入的时间
  2.日期格式化
      getFullYear()  年      getMonth()      月(0-11,0为12月)
      getDate()       日      getDay()          星期(0-6,0周日)
      getHours()     时      getMinutes()   分
      getSeconds() 秒

八、重绘和回流的区别关系

    重绘:当渲染树中的元素外观(如:颜色)发生变化,不影响布局时,产生重绘
    回流:当渲染树中的元素的布局(如:尺寸,位置,隐藏/状态)发生改变时,产生重绘回流
   回流必将引起重绘,而重绘不一定会引起回流

九、this对象的理解

     this总是指向函数的直接调用者
     如果有new关键字,this指向new出来的实例对象
     在事件中,this指向触发这个事件的对象
     IE下attachEvent中的this总是指向全局对象

十、js延迟加载的方式有哪些

   defer和async、动态创建DOM方式(用的最多)、按需异步载入js

十一、js垃圾回收方法

1. 标记清除法
     这是js最常见的垃圾回收方式,当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”
     垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中的变量以及被环境中变量所引用的变量(闭包),在这些完成之后仍存在标记的就是要删除的变量了
2.引用计数法
      在低版本IE中经常会出现内存谢鸥,很多时候就是因为其采用引用计数方式进行垃圾回收。引用计数的策略是跟踪记录每个值被使用的次数,当声明了一个变量并将一个引用类型赋值给该变量的时候这个值的引用此处就加1,如果该变量的值变成了另一个,则这个值的引用次数减1,当这个值的引用次数变为0时,说明没有宾亮在使用,这个值没法被访问了,因此可以将其占用的空间回收,这样垃圾回收器会在运行的时候清理掉引用次数为0的值占用的空间。

十二、attribute和property的区别是什么

  attribute是dom元素在文档中作为html标签拥有的属性
  property是dom元素在js中作为对象拥有的属性
  对html的标准属性来说,attribute和property是同步的 ,是会自动更新的
   但对于自定义的属性拉说他们是不同步的

十三、异步加载js 的方式有哪些

   1.设置<script>属性async=“async”(一旦脚本可用,则会异步执行)
   2.动态创建script DOM:document.createElement(‘script’)
   3.XmlHttpRequest脚本注入
   4.异步加载库 LAB.js
   5.模块加载器Sea.js

十四、js中,调用函数有哪几种方式

    1.方法调用模式 Foo.foo(arg1,arg2)
    2.函数调用模式foo(arg1,arg2)
    3.构造器调用模式(new Foo())(arg1,arg2)
    4.call/applay 调用模式 Foo.foo.call(that, arg1, arg2);            
    5.bind 调用模式 Foo.foo.bind(that)(arg1, arg2)();

猜你喜欢

转载自blog.csdn.net/weixin_43841301/article/details/101030772