变量提升
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 只有声明的变量会提升,初始化的不会。
js中创建函数有两种方式:函数声明式和函数字面量式,只有函数声明才存在函数提升。
函数声明优先于变量声明。
闭包的理解
有权访问另一个函数作用域内变量的函数都是闭包
参考原地址
通俗来说,一般情况一个函数(函数作用域)执行完毕,里面声明的变量会全部释放,被垃圾回收器回收。但闭包利用一个技巧,让作用域里面的变量,在函数执行完之后依旧保存没有被垃圾回收处理掉。
举例来说,当点击一组button按钮的时候,通过for循环来为每一个btn添加点击事件,通过把i传入自执行函数来绑定click事件,由于i一直在被引用中,不会被回收掉,所以就形成了闭包。
原型及原型链
iframe缺点
样式难调,会增加服务器的http请求,无法被一些搜索引擎解读,iframe会阻塞主页面Onload事件。
iframe优点: 能够直接把嵌入的网页展示出来,第三方图标广告
Ajax的原生写法
同源策略
限制了一些不同源的脚本,从一个域上加载的脚本不允许访问另外一个域的文档属性。
前端处理跨域
- jsonp跨域通过动态创建script标签,请求一个带参数的路径及一个回调函数,缺点是只能get请求
- document.domain + iframe跨域,缺点是仅限主域相同,子域不同的跨域应用(父:(http://www.domain.com/a.html),子:(http://child.domain.com/b.html))
postMessage跨域html5中的属性,可跨window属性之一
跨域资源共享,只服务端设置Access-Control-Allow-Origin即可,前端无须设置,若要带cookie请求:前后端都需要设置。主流的跨域解决方案
- node.js中间件代理:通过启一个代理服务器,实现数据的转发
判断两个对象是否相等
instance of(能在实例的原型对象链中找到该构造函数的prototype属性所指向的原型对象,就返回true)
instanceof用于判断一个变量是否某个对象的实例.
typeof用以获取一个变量或者表达式的类型性能优化处理
1.减少http请求,合并压缩css,js文件 2.减少dom操作 3.json格式的数据交换,以为json是一种轻量级的数据格式。4.标签语义化,利于seo优化 5.css文件放在head头部和js放在body下部es6箭头函数this
this指向是在定义函数时绑定的,不是执行时绑定的。继承的是父执行上下文里面的thises6的set方法
set是一个构造函数,[…new Set(array)]数组去重,类似于数组,map类似于键值对对象及数组的深拷贝
数组的浅拷贝,就是利用“=“来实现的,但是浅拷贝缺点是,被拷贝的数组变化,拷贝的数组也会随之变化。所以深拷贝就成为必要的。
对比下来啊,对象的深拷贝也就不困难了