js知识

2019-02-13  本文已影响0人  阿喜liang

DOM操作——怎样添加、移除、移动、复制、创建和查找节点

createDocumentFragment()//创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
appendChild()
removeChild()
replaceChild()
insertBefore() //并没有insertAfter()
getElementsByTagName() // 通过标签名称
getElementsByName()//通过元素的name属性值
getElementById() // 通过元素ID,唯一性

ES6的了解说一些

新增模版字符串(为javascript提供了简单的字符串插值功能)、箭头函数(操作符左边为输入的参数,而右边则是进行的操作以及返回的值 Inputs =>outputs。)、for-of(用来遍历数据—例如数组中的值)、arguments对象可被不定参数和默认参数完美代替。ES6将 promise对象纳入规范,提供了原声的promise对象。增加了let和const命令,用来声明变量。增加了块级作用域。let命令实际上就增加了快级作用域。ES6规定,var命令和function命令声明的全局变量,属于全局对象的属性;let命令、const命令、class命令声明的全局变量,不属于全局对象的属性。

如何解决跨域问题?

XMLJSON的区别?

1.数据体积方面
JSON相对于XML来讲,数据的体积小,传递的速度更快些。
2.数据交互方面
JSON与javascript的交互更加方便,更容易解析处理,更好的数据交互。
3.数据描述方面
JSON对数据的描述性比XML较差
4.JSON的速度要远远快于XML

谈谈你对webpack的看法?

webpack是一个模块打包工具,你可以使用webpack管理你的模块依赖,并编译输出模块们所需的静态文件。它能够很好的管理、打包web开发中所用到的HTML、javascript、css以及各种静态文件(图片、字体等),让开发过程更加高效,对于不同类型的资源,webpack有对应的模块加载器。webpack打包器会分析模块之间的依赖关系,最后生成了优化且合并后的静态资源。
webpack的两大:
1.code splitting(可以自动完成)
2.loader可以处理各种类型的静态文件,并且支持串联操作
webpack是以commonJs的形式来书写脚本的,但对AMD/CMD的支持也很全面,方便旧项目进行代码迁移。
webpack具有requireJsbrowserify的功能,但仍有很多自己但新特性:
1.对CommonJS、AMD、ES6对语法做来兼容
2.对js、css、图片等资源文件都支持打包
3.串联模式加载器以及插件机制,让其具有更好但灵活性和扩展性,例如提供对CoffeeScript、ES6的支持
4.有独立的配置文件webpack.config.js
5.可以将代码切割成不同的chunk,实现按需加载,降低了初始化时间
6.支持SourceUrls和SourceMaps,易于调试
7.具有强大的Plugin接口,大多是内部插件,使用起来比较灵活
8.webpack使用异步IO,并具有多级缓存,这使得webpack很快且在增量编译上更加快

说说你对作用域链的理解

作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的

对前端模块化对认识

AMD是RequireJS在推广过程中对模块定义对规范化产出。
CMD是SeaJS在推广过程中对模块定义对规范化产出。
AMD是提前执行,CMD是延迟执行
AMD的风格通过返回一个对象作为模块对象,CommonJS的风格通过对module.exports或exports的属性赋值来达到暴露模块对象的目的。
CMD模块方式:

define(function(require, exports, module) {

      // 模块代码

    });

javascript垃圾回收方法

快速排序的思想并实现一个快排?

“快速排序”的思想很简单,整个排序过程只需要三步:
(1)在数据集之中,找一个基准点
(2)建立两个数组,分别存储左边和右边的数组
(3)利用递归进行下次比较

function quickSort(arr){
        if(arr.length<=1){
            return arr;//如果数组只有一个数,就直接返回;
        }

        var num = Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整

        var numValue = arr.splice(num,1);//找到中间数的值
        var left = [];
        var right = [];

        for(var i=0;i<arr.length;i++){
            if(arr[i]<numValue){
                left.push(arr[i]);//基准点的左边的数传到左边数组
            }
            else{
               right.push(arr[i]);//基准点的右边的数传到右边数组
            }
        }

        return quickSort(left).concat([numValue],quickSort(right));//递归不断重复比较
    }

    alert(quickSort([32,45,37,16,2,87]));//弹出“2,16,32,37,45,87”

对闭包的理解

使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免 全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用域的概念。
闭包有三个特性:

null和undefined的区别?

null是一个表示“无”的对象,转为数值时为0;undefined是一个表示“无”的原始值,转为数值时为NAN,当声明的变量还未初始化时,变量的默认值为undefined。
null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
undefined表示“缺少值”,就是此处应该有一个值,但是还没有定义。典型的用法是:

  1. 变量被声明了,但没有赋值时,就等于undefined。
  2. 调用函数时,应该提供的参数没有提供,该参数等于undefined。
  3. 对象没有赋值的属性,该属性的值为undefined。
  4. 函数没有返回值时,默认返回undefined。

null表示“没有对象”,即该处不应该有值。典型用法是:

  1. 作为函数的参数,表示该函数的参数不是对象。
  2. 作为对象原型链的终点。

new操作符具体干了什么呢?

  1. 创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型。
  2. 属性和方法被加入到this引用的对象中。
  3. 新创建的对象由this所引用,并且最后隐式的返回this。
var obj = {};
obj._proto_ = prototype;
base.call(obj)

js延迟加载的方式有哪些?

defer和async、动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)、按需异步载入js。

异步加载和延迟加载

  1. 异步加载的方案:动态插入script标签

  2. 通过ajax去获取js代码,然后通过eval执行

  3. script标签上添加defer或者async属性

  4. 创建并插入iframe,让它异步执行js页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。

  5. 延迟加载:有些js代码并不是

哪些操作会造成内存泄漏?

javascript对象的几种创建方式?

  1. 工厂模式
  2. 构造函数模式
  3. 原型模式
  4. 混合构造函数和原型模式
  5. 动态原型模式
  6. 寄生构造函数模式
  7. 稳妥构造函数模式

javascript继承的6种方法?

  1. 原型链继承
  2. 借用构造函数继承
  3. 组合继承(原型+借用构造)
  4. 原型式继承
  5. 寄生式继承
  6. 寄生组合继承

创建ajax的过程?

  1. 创建‘XMLHttpRequest’对象,也就是创建一个异步调用对象。
  2. 创建一个新的‘HTTP'请求,并指定该’HTTP‘请求的方法、’URL‘及验证信息。
  3. 设置响应’HTTP‘请求状态变化的函数。
  4. 发送’HTTP‘请求。
  5. 获取异步调用返回的数据
  6. 使用JavaScript和DOM实现局部刷新
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET','demo.php','true');
xmlHttp.send()
xmlHttp.onreadystatechange = function() {
  if(xmlHttp.readyState === 4 & xmlHttp.status === 200) {
  }
}

解释javascript的同源策略?

同源策略是客户端脚本(尤其是javascript)的重要安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。
这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议。
指一段脚本只能读取来自同一来源的窗口和文档的属性。

上一篇 下一篇

猜你喜欢

热点阅读