熬夜总结50个js高级知识点(一)

1、undeclared 与 undefined 的区别?

  • undefined:声明了变量,但是没有赋值
  • undeclared:没有声明变量就直接使用

2、let & const与 var 的区别?

  • var存在变量提升,可重复声明同一变量,声明的变量均可改
  • let没有变量提升,不可重复声明同一变量,声明的变量均可改
  • const没有变量提升,不可重复声明同一变量,声明的基本数据类型不可改,引用类型可改属性,不可只声明变量而不赋值

 3、暂时性死区问题

var a = 100;

if(1){
    a = 10;
    //在当前块作用域中存在a使用let/const声明的情况下,给a赋值10时,只会在当前作用域找变量a,
    // 而这时,还未到声明时候,所以控制台Error:Cannot access 'a' before initialization
    let a = 1;
}
 

 4、获取DOM元素有哪些方法

方法描述返回类型
document.getElementById(id)通过id获取dom符合条件的dom对象
document.getElementsByTagName(tagName)通过标签名获取dom符合条件的所有dom对象组成的类数组
document.getElementsByClassName(class)通过class获取dom符合条件的所有dom对象组成的类数组
document.getElementsByName(name)通过标签的属性name获取dom符合条件的所有dom对象组成的类数组
document.querySelector(选择器)通过选择器获取dom符合条件的第一个dom对象
document.querySelectorAll(选择器)通过选择器获取dom符合条件的所有dom对象组成的类数组

5、操作DOM元素有哪些方法

标题描述
createTextNode创建一个文本节点
cloneNode(deep)复制一个节点,连同属性与值都复制,deep为true时,连同后代节点一起复制,不传或者传false,则只复制当前节点
createDocumentFragment创建一个文档碎片节点
appendChild

追加子元素

insertBefore

将元素插入前面

removeChild删除子元素
replaceChild替换子元素
getAttribute获取节点的属性
createAttribute创建属性
setAttribute设置节点属性
romoveAttribute删除节点属性
element.attributes将属性生成类数组对象
createElement创建一个标签节点

6、DOM的类型有哪几种?

元素节点              Node.ELEMENT_NODE(1)
属性节点              Node.ATTRIBUTE_NODE(2)
文本节点              Node.TEXT_NODE(3)
CDATA节点             Node.CDATA_SECTION_NODE(4)
实体引用名称节点       Node.ENTRY_REFERENCE_NODE(5)
实体名称节点          Node.ENTITY_NODE(6)
处理指令节点          Node.PROCESSING_INSTRUCTION_NODE(7)
注释节点              Node.COMMENT_NODE(8)
文档节点              Node.DOCUMENT_NODE(9)
文档类型节点          Node.DOCUMENT_TYPE_NODE(10)
文档片段节点          Node.DOCUMENT_FRAGMENT_NODE(11)
DTD声明节点            Node.NOTATION_NODE(12)


7、JS的作用域及作用域链

什么是作用域呢?

在 Javascript 中,作用域分为 全局作用域 和 函数作用域

  • 全局作用域:代码在程序任何地方都能访问,window对象的内置属性都属于全局作用域
  • 函数作用域:在固定的代码片段才能被访问

image.png

作用域有上下级关系,上下级关系的确定就看函数是在哪个作用域下创建的。如上,fn作用域下创建了bar函数,那么“fn作用域”就是“bar作用域”的上级。

作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。

什么是作用域链?

一般情况下,变量取值到 创建 这个变量 的函数的作用域中取值

但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链

var x = 10;

function fn(){
    console.log(x);
}

function show(f){
    var x = 20;
    f();    // 10 
}

show(fn);
复制代码

image.png

8、数组的splice 与 slice 的区别?

方法参数描述
splicesplice(start, num, item1, item2, ...)从start索引开始,截取num个元素,并插入item1、item2到原数组里,影响原数组
sliceslice(start, end)从start开始,截取到end - 1,如果没有end,则截取到左后一个元素,不影响原数组

9、substr 和 substring 的区别?

方法参数描述
substrsubstr(start,length)返回从start位置开始length长度的子串
substringsubstring(start,end)返回从start位置开始到end位置的子串(不包含end)

10、includes 比 indexOf好在哪?

includes可以检测NaN,indexOf不能检测NaN,includes内部使用了Number.isNaNNaN进行了匹配

11、下面代码输出的结果?

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

答案:3,3,3

解决方法

1.

for(let i = 0; i < 3; i++){
  setTimeout(function(){
      console.log(i);   
  },0); 
};
// 0 1 2

2.

for(let i = 0; i < 3; i++){
  setTimeout(function(){
      console.log(i);   
  },0); 
};
// 0 1 2

12、什么是Promise?解决了什么问题?

有什么用呢?

  • 1、解决回调地狱问题
  • 2、代码可读性提高
  • 3、你可以信任Promise,它的状态只会改变一次并且不可逆

推荐阅读

 13、什么是async/await?解决了什么问题?

对于async/await,总结为一句话async/await是generator + Promise的语法糖,它用同步方式执行异步代码

推荐阅读

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值