欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS基础三(常见问题及答案)

程序员文章站 2022-03-03 12:12:42
JS常见问题及答案说明EC:执行上下文AO:活动对象(存储了局部执行上下文中的数据)VO:变量对象(存储全局执行上下文中的数据)GO:全局对象 windowECStack:执行上下文栈Scope:作用域1.什么是代码段?使用script标签包起来的就是代码段特点:上一个代码段定义的状态,在下一个代码段中可以使用2.JS代码执行分几个阶段?预编译:1.扫描代码段,如果代码有语法错误,停止一切工作,立即报错2.提升:(1)加var变量提升全局代码:提升代码段最前面局部代码...

JS常见问题及答案

说明
EC:执行上下文
AO:活动对象(存储了局部执行上下文中的数据)
VO:变量对象(存储全局执行上下文中的数据)
GO:全局对象 window
ECStack:执行上下文栈
Scope:作用域

1.什么是代码段?

使用script标签包起来的就是代码段
特点:上一个代码段定义的状态,在下一个代码段中可以使用

2.JS代码执行分几个阶段?

预编译:
1.扫描代码段,如果代码有语法错误,停止一切工作,立即报错
2.提升:
(1)加var变量提升
全局代码:提升代码段最前面
局部代码:提升局部代码最前面
(2)函数定义提升
代码执行
一行一行执行代码

3.JS中的数据类型和数据存储?

为了更加合理的使用内存,提出了数据类型
基本数据类型:
number string boolean undefined null
存储在栈区(栈区保存了堆区的地址)
引用数据类型:
object array function
存储在堆区

4.加var和不加var变量的区别?

  1. 加var的会提升
  1. 不加var的存储在GO中
  2. 不加var的只能作为全局变量

5.什么是作用域链?

作用域链说的是数据的查找机制,找一个数据,先在自己的EC中找,找不到,去父函数所在的EC中找,如果还找不到,就去父函数的父函数EC中找,直到找到全局EC,如果还找不到,就报错。

6.什么是EC?

全局代码执行时产生全局的EC,调用一个函数时,就产生一个局部的EC。EC是放在一个栈结构中的,全局的EC,先入栈,调用一个函数,局部的EC也入栈,函数调用完毕,局部EC就出栈,全局代码执行完毕,全局EC也出栈。

7.什么是闭包(closure)

一个不能被销毁的执行上下文就是一个闭包,它有两大作用:
(1)保护:位于闭包的数据,外界不能访问
(2)保存:EC出栈了,数据没有销毁,数据的生命周期延长
缺点:造成内存空间的泄露,要合理使用闭包

8.JS中的错误分类

  1. 语法错误 JS代码在预编译时就发现了错误
    特点:
    1.代码没有机会执行
    2.错误容易发现
function(){

}
//会报错:Uncaught SyntaxError: Function statements require a function name
  1. 引用错误:通常访问一个没有定义的变量就会发生引用错误
    解决办法:先定义好变量,再使用
    特点:JS代码在执行的时候,才会发现引用错误,错误之后的代码不执行
 console.log(a);
//会报错:Uncaught ReferenceError: a is not defined
  1. 类型错误:
    使用类型不当,提供的数据,不是JS想要的
    也是JS代码在执行时才会发现,类型错误之前的代码会执行,之后的不执行
 var f = 110;
    f();
//会报错:Uncaught TypeError: f is not a function
  1. 范围错误:
    使用容器不当
   // 定义一个数组
    var arr = ["a","b","c"];  // 定义数组方式1
    var arr2 = new Array(10); // 定义数组方式2   10表示数组中可以存储10个数据

    var arr3 = new Array(-5);
//会报错:Uncaught RangeError: Invalid array length
  1. 上面4类错误,在控制台都会报错,还有一类错误,控制台不会报错,叫逻辑错误,可以通过debugger调试错误。

9.异常处理

异常不是错误,异常是指可能出错的代码。
语法:

 try{
            // 放可能出错的代码
        }catch(e){
            // 如果上面的代码错误了,就到这里进行错误的处理,其中e表示错误对象
            // 它里面包含了错误信息。通过查看e,可以知道它到底出了什么错误
        }finally{
            // 无论对错,代码都会执行到此处,在JS中用的不多
        }

10.逻辑与,或,非

  1. 逻辑与 && 双元运算符 有两个操作数
    只有两个操作数都是真 整体的结果才为真
    console.log(true&&true)//true
    console.log(false&&true)//false
    console.log(true&&false)//false
    console.log(false&&false)//false
  1. 逻辑或 || 双元运算符 有两个操作数
    只要有一个操作数为真,整体的结果就为真
    console.log(true||true)//true
    console.log(false||true)//true
    console.log(true||false)//true
    console.log(false||false)//false
  1. 逻辑非 ! 单目运算符 1个操作数
    如果为真 整体就是假 如果为假 整体就是真
    console.log(!true);  // false
    console.log(!false);  // true

本文地址:https://blog.csdn.net/weixin_46628546/article/details/107472669