当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JS基础三(常见问题及答案)

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

2020年07月22日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网