一,闭包
1.1什么叫闭包
即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。 可以把闭包简单理解成“定义在一个函数内部的函数。
1.1.1案例
<script>
function a1(){
var n=123;
function a2(){
console.log(n); // 123
}
}
<script/>
在代码中,函数a2就被包括在函数a1内部,这时a1内部的局部变量,对a2都是可见的。 但是a2内部的局部变量,对a1就是不可见的。这是JavaScript语言特有的“链式作用域”结构。 既然a2可以读取a1中的局部变量,那么只要把a2作为返回值,我们不就可以在a1外部读取它的内部变量了吗!
<script>
function a1(){
var n=123;
function a2(){
console.log(n); // 123
}
return a2;
}
var res=a1();
res(); // 123
<script/>
a2就是一个简单的闭包
<script>
function a1(){
var n=123;
function a2(){
console.log(n++);; // 123
}
return a2;
}
var res=a1();
res();
res();
</script>
执行闭包后,闭包内部变量会存在,而闭包内部函数的内部变量不会存在。
二,
2.1 简述23.cookie , sessionStorage , localStorage的区别是什么
- 都可以用来存储数据
- ookie一条数据大小不能超过4KB ,最多不能存储超过20条,如果没有设置过期时间,那么在浏览器关闭后消失
- sessionStorage是会话存储,一条大小不能超过5M,数量没有限制,关掉页面数据消失
- localStorage本地存储,一条大小不超过5M,数量没有限制,除非主动删除,否则数据不会消失
三,
3.1ES6语法的新增特性有哪些
- let关键字,声明变量
- const关键字,声明常量
- 模板字符串
- 箭头函数
- 对象和数组解构
- 数据类型Symbol
- Set集合和Map集合
- Promise对象
- 引入class关键字
- Symbol 函数栈不能用 new 命令,因为 Symbol 是原始数据类型,不是对象。可以接受一个字符串作为参数,为新创建的 Symbol 提供描述,用来显示在控制台或者作为字符串的时候使用,便于区分。
-
- Es6当中,函数在谁的范围内调用,函数内部this指向指的就是谁,
-
- Es5当中,谁调用了函数,函数内部的this指向指的就是谁
四,
4.1 ==(宽松相等)和 ===(严格相等)有什么区别
- == 判断左右两边的值是否一致,但是只能判断值,不能判断类型,也就是说 2 ==‘2’是成立的 === 既判断值,也判断类型
五
5.1js的强制转换和隐式转换是怎样的
- parseInt,parseFloat,Number 这三种是强制转换
- -=、*=、/=、%= 是隐式转换