报班学习第一天

作用域

执行环境中变量或函数的作用范围,作用域定义了变量或者函数有权访问的其他数据

全局作用域

1.全局作用域在页面打开时被创建,页面关闭时被销毁

2.在script标签中的变量和函数,作为全局作用域,在页面的任意位置可以被访问到

3.全局作用域可以认为是Window

局部(函数)作用域

1.函数调用时,函数作用域被创建,函数执行完毕,函数作用域被销毁

2.每调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的

3.函数作用域可以访问上层作用域,但是相邻函数作用域是相互独立的

ES6中的块级作用域

通过let或者const声明会形成块级作用域,与其他作用域一样,对外是不可见的

作用域链

预编译

全局预编译

1.全局上下文创建后,会生成变量对象GO

2.GO首先寻找变量声明,然后寻找函数声明,属性值为函数本身

3.如果函数名与变量名冲突,函数声明会将变量声明覆盖

函数预编译

函数上下文创建后,会生成变量对象AO

1.寻找变量声明,变量名作为AO对象的属性名,属性值为undefined

2.寻找形参,形参名作为AO的属性名,属性值为undefined

3.将实参的值赋予给形参,即替换AO对象中形参的属性值

4.寻找函数声明,函数名作为AO对象的属性名,属性值为函数本身

5.如果函数名与变量名冲突,函数声明会将变量声明覆盖

JS数据类型

基本数据类型:

string number boolean null undefined symbol bigint

引用数据类型:

object(Array Object Function Map Set)

深拷贝与浅拷贝

浅拷贝:

浅拷贝只会拷贝引用数据数据类型的地址,当某个数据被修改后,也会影响到另一个拷贝的数据

深拷贝:

深拷贝会拷贝多层,对于每一级的数据都会拷贝

深拷贝实现

1.Object.assign()和扩展运算符只有一级属性为深拷贝,二级属性后就是浅拷贝

2.JSON.parse(JSON.stringify())

先用JSON.parse把对象转换成JSON字符串,然后用JSON.stringify把JSON字符串转换成对象

3.通过递归方式实现

4.jQuery的extend方法实现深拷贝

5.函数库lodash

var _ = require('lodash')

var obj2 = _.cloneDeep(obj1)

闭包

定义:闭包就是能够访问到其他作用域中变量的函数,闭包是作用域链中的一种现象

作用:延伸了变量的作用范围

缺点:内存泄漏

this

全局作用域和普通函数调用,此时 this 指向 window

方法调用中谁调用this指向谁

通过事件绑定的方法,此时this指向绑定事件的对像

定时器函数this指向window

箭头函数中没有this或者说他的this指向上一层的作用域

Call和apply和bind可以动态改变this指向,bind不会立即调用函数会返回一个函数要调用才能执行

EventLoop(事件循环)

定义:在代码执行过程中,碰到异步任务会添加到任务队列中,等主线程执行完毕后执行异步任务

异步任务分为宏任务和微任务,微任务优先级大于宏任务

执行顺序先同步后异步

异步任务:

宏任务:setTimeout setInterval ajax DOM事件

微任务:Promise

微任务执行优先级 > 宏任务

同源策略

定义:同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个 ip 地址,也非同源。

源就是协议、域名和端口号。

跨源网络访问

1.跨域写操作,一般被允许。如:链接(links),重定向以及表单提交

2.跨域资源嵌入,一般被允许

对于第一第二点1,2没有跨域问题

3.跨域读操作,一般不被允许,但可以通过内嵌资源来进行读取访问

img文件中的文件资源受不受同源策略影响?

图片资源受到同源策略影响,但是属于跨域资源嵌入的方式,所以没有跨域问题

跨域的处理方式

1.JSONP

原理:动态创建script标签,src属性指向没有跨域限制

src指向一个接口,接口返回格式一定是***()函数表达式,使用时函数名要与后端返回的一致

缺点:只能get请求,不能返回后端状态码,

2.CORS

1.简单请求

2.非简单请求

原型

构造函数时,会创建一个对应的原型对象。构造函数默认有一个prototype属性,prototype的值指向函数的原型。同时原型中也有一个constructor属性,constructor的值指向函数对象。 通过构造函数实例化出来的对象,默认有一个proto属性,proto的值指向构造函数的原型。

原型链

当在实例化的对象中访问一个属性时,首先会在该对象内部寻找,如找不到,则会向其proto指向的原型对象中寻找,如仍找不到,则继续向原型中proto指向的上级原型对象中寻找,直至找到或原型链尽头,值为null,这种链状过程即为原型链

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值