说明
EC:执行上下文
AO:活动对象(存储了局部执行上下文中的数据)
VO:变量对象(存储全局执行上下文中的数据)
GO:全局对象 window
ECStack:执行上下文栈
Scope:作用域
使用script标签包起来的就是代码段
特点:上一个代码段定义的状态,在下一个代码段中可以使用
预编译:
1.扫描代码段,如果代码有语法错误,停止一切工作,立即报错
2.提升:
(1)加var变量提升
全局代码:提升代码段最前面
局部代码:提升局部代码最前面
(2)函数定义提升
代码执行
一行一行执行代码
为了更加合理的使用内存,提出了数据类型
基本数据类型:
number string boolean undefined null
存储在栈区(栈区保存了堆区的地址)
引用数据类型:
object array function
存储在堆区
- 加var的会提升
作用域链说的是数据的查找机制,找一个数据,先在自己的EC中找,找不到,去父函数所在的EC中找,如果还找不到,就去父函数的父函数EC中找,直到找到全局EC,如果还找不到,就报错。
全局代码执行时产生全局的EC,调用一个函数时,就产生一个局部的EC。EC是放在一个栈结构中的,全局的EC,先入栈,调用一个函数,局部的EC也入栈,函数调用完毕,局部EC就出栈,全局代码执行完毕,全局EC也出栈。
一个不能被销毁的执行上下文就是一个闭包,它有两大作用:
(1)保护:位于闭包的数据,外界不能访问
(2)保存:EC出栈了,数据没有销毁,数据的生命周期延长
缺点:造成内存空间的泄露,要合理使用闭包
function(){
}
//会报错:Uncaught SyntaxError: Function statements require a function name
console.log(a);
//会报错:Uncaught ReferenceError: a is not defined
var f = 110;
f();
//会报错:Uncaught TypeError: f is not a function
// 定义一个数组
var arr = ["a","b","c"]; // 定义数组方式1
var arr2 = new Array(10); // 定义数组方式2 10表示数组中可以存储10个数据
var arr3 = new Array(-5);
//会报错:Uncaught RangeError: Invalid array length
异常不是错误,异常是指可能出错的代码。
语法:
try{
// 放可能出错的代码
}catch(e){
// 如果上面的代码错误了,就到这里进行错误的处理,其中e表示错误对象
// 它里面包含了错误信息。通过查看e,可以知道它到底出了什么错误
}finally{
// 无论对错,代码都会执行到此处,在JS中用的不多
}
console.log(true&&true)//true
console.log(false&&true)//false
console.log(true&&false)//false
console.log(false&&false)//false
console.log(true||true)//true
console.log(false||true)//true
console.log(true||false)//true
console.log(false||false)//false
console.log(!true); // false
console.log(!false); // true
本文地址:https://blog.csdn.net/weixin_46628546/article/details/107472669
如对本文有疑问, 点击进行留言回复!!
微信小程序wx.scanCode扫描条形码,偶尔出现条形码不正确导致查询失败
Android 入门第七讲01-数据存储(数据存储概述,文件存储(raw和asserts目录读写,data/data/包名目录读写,sdcard目录读写),SharedPreferences读写)
vue-axios系列:axios拦截器,配置请求头,配置请求参数
网友评论