同协议、同域名、同端口简称为同源策略,同源策略是为了互联网的安全,例如网站A是无法访问到网站B所存入的cookie信息,因为它不符合同源策略的标准。但是有些技术可以进行规避:
事件委托是指将事件绑定到目标元素的父元素上,利用事件的冒泡机制触事件;这样做的好处有节省内存的开销以及对新增加的元素节点同样生效。
执行顺序是同步代码>微任务>宏任务,程序执行,限制执行同步代码,遇到微任务(resolve())就放到微任务队列中,优先执行微任务,遇到宏任务就放到函数调用栈中的指向的任务成为宏任务,按顺序弹出执行;一次CPN轮询下,先执行同步代码,将微任务队列中的任务全部执行完成,再按顺序执行函数调用栈中的宏任务。
浏览器打开网页时,浏览器会向服务器发送请求后会收到服务器返回的一个响应报文,报文中的存在有HTTP状态码的头信息。浏览器通过状态码进行一系列操作,以下就是状态码的分类:
1)1**类型的状态码,代表服务器收到请求,并要求继续执行操作:
2)2**类型的状态码,发送成功,操作成功并被处理:
3)3**类型的状态码,重定向,需要进一步操作来完成请求:
4)4**类型的状态码,客户端错误,请求包含错误或无法完成请求:
5)5**类型的状态码,服务器错误,请求过程中服务器发生错误:
transform可以定义元素很多静态样式实现变形倾斜(skew)、旋转(rotate)、缩放(scale)、位移(translate)以及透视(perspective)等功能,几个主要参数:
默认情况下CSS属性的变化是瞬间完成的可以控制transform让变化过程平滑,但是不是所有的css属性都支持动画特效,一般来说具有中间值的属性是可以存在动画。简单写法:transition: 2s;
动画过程是2s,其他省略的属性全部是默认值,有以下控制值:
transition过渡动画是两个状态间的变化,帧动画可以处理动画过程中不同时间的细节变化,对每一帧进行处理,也可以把帧动画理解为多个帧之间的过渡动画。也不是所有的css属性都具有动画,具有以下属性:
一个函数对其周围状态(变量)的引用并保存周围变量,乃至函数执行完成后仍然可以访问的现象称之为闭包,闭包让外部访问函数内部的变量成为可能(私有属性),因为被引用的数据常驻内存,可能会造成内存泄露(一块内存长期被变量占据而不进行释放),闭包可以让你在一个内层函数中访问到其外层函数的作用域的状态并保存,在js中每当创建一个函数,闭包环境就在函数创建时产生,闭包环境相互独立,如果闭包环境引用外部函数作用域的一个变量a,即使当外部函数作用域的变量被销毁释放内存,但变量a不会被删除。
未声明的变量是程序中不存在且未声明的变量,访问未声明的变量会进行报错;未定义的变量是在程序中声明但尚未给出任何值的变量,访问不会报错并得出undefined值。
声明变量时省略关键字就会造成变量污染
延时一段时间并执行任务,因为它是宏任务,需要等待微任务执行完成后才可以执行。
逻辑运算符"=="进行两个是比较是否相等时,不同的数据类型会造成隐式转换后再比较,属于js中比较难的部分,具体情况如下:
[] == true;//false
,空数组转为""再转为0,逻辑值true直接转为1;
'1' == 1 // true
,字符串转为数字后与数字1比较;
'1' == true; // true
,字符串转为数字1,布尔值转为数字1,比较相等;
true == 1;/ true
,布尔值转为数字1再比较;
有趣的事情是[] == false和![] == false
的结果都是true,第一个[]数组转为""再转成0,false直接转为0,比较相等;第二个同理,!符号优先级高所以先执行,所以式子就变成(![]) == false
,估计就能理解了!另外有几个比较的特殊undefined == null //
7.逻辑值为假?逻辑值为真?
js中空字符串("")、NaN、undefined、null、flase,0,逻辑值为假,但是空数组([])、空对象({})逻辑值为真。
复杂数据类型:数组、对象;
9.new操作符具体干了什么呢?
1.创建了一个新的空对象{};
3.构造函数中的this指向新对象a;
Var res = 构造器.call(obj),因为函数存在闭包所以每一个作用域都是相互独立,就有了对象的概念。
4.属性访问器中的setter中进行判断,如果是对象(引用类型则返回),否则返回空对象{}
;
前端开发中我们经常需要绑定一些持续触发的函数,例如:跳转屏幕宽度resize,监听页面滚动scroll,拖拽mousemove。这些过程中绑定的函数频繁的触发,所以节流和防抖就很好的解决办法。
MVVM是model-View-ViewModel的缩写,其中model代表数据模型可以其中定义数据操作业务逻辑;View代表视图层,界面UI组件负责展示数据;ViewModel监听数据模型的改变和控制视图行为、处理用于交互。MVVM架构中,数据模型和视图分离,数据模型仅与ViewModel进行双向交互,View数据变化会同步传入ViewModel中,进而改变数据模型的值,同理数据模型的改变也会间接反映到View视图层上。ViewModel通过双向绑定把view视图和Model数据模型连接,同步操作自动完成,复杂的数据状态完全由MvvM统一管理。
实例从创建到销毁的过程就叫生命周期,从开始创建,初始化数据,编译解析模板,挂载DOM并渲染,循环监听更新渲染,销毁实例等一系列过程。
vue实现数据双向绑定的主要是采用数据劫持结合发布者订阅者者模式的方式,通过definedProperty()定义属性特征以及属性访问器getter/setter进行数据拦截,当数据发生变动时进入getter访问器,通过notify()通知订阅者,触发回调update方法更新数据视图。vue的双向绑定将MVVM作为绑定数据的入口,整合Observer,Compile和Watcher三者,开局Observe监听自己数据变化生成发布者,通过Compile解析模板指令,生成属性订阅者。
hash模式在浏览器中URL后面带"#“号,”#"包括后面的字符称之为hash,可以使用window.location.hash
读取,当路由跳转时,URL发生改变,但不会发送HTTP网络请求,页面不会重载,但需要注意的是页面上的锚点会影响到hash模式;history模式是采用HTML5新增的两个方法pushState()和replaceState()
,可以对浏览器历史记录栈进行修改,以及popState事件触发状态的变更,history在真实的项目中常常需要后端服务器的配合,例如nginx的反向代理。
.vue
文件的使用,vue文件的使用理解更为直接。一切皆为组件,声明周期过程都提供合理的钩子函数;
首页可以控制导航跳转,beforeEach,afterEach导航守卫,可以对页面title进行修改,页面访问权限的控制,例如登录后才可以访问某些页面等效果实现,beforeEach和afterEach都是存在三个主要参数,to、from、next()
以下就是详细的介绍:
keep-alive是Vue内置的一个组件,包含的组件保留状态,避免被重新渲染,keep-alive加入两个属性,include(包含)和exclude(排除)且exclude优先级大于include,可以通过正则表示式或者字符串定义。
$router
是路由实例对象,包含路由的跳转方法,钩子函数,而$route
是活跃路由信息对象,指向正在展示的活跃路由的信息,包含pah,params等信息;
当你修改DOM元素的值后直接获取DOM节点的更新数据可能会造成获取不到,使用$nextTick回调函数可以让渲染完成后才会进行操作。
单页面应用(SPA)程序仅有一个入口,首屏加载时间相对较长,一旦加载完成后用户体验很好,减少服务器的压力,但是不利于SEO,多页面应用程序有多个入口,页面跳转是整页进行刷新。
v-for具有更高的优先级,意味者遍历的时候每个元素都进行if判断,造成内存的浪费。
懒加载方式引入文件,打包构建时采用tree shaking操作,分割第三方库使用CDN方式引入。
插槽常用于组件封装中,组件具有一定布局,但内容元素相似,可以使用插槽预留位置,使用插入对应的DOM,vue内部会自动进行替换。
Grunt和Gulp属于一类的都是构建工具,Webpack 是目前最热门的前端资源模块化管理和打包工具,gulp基于任务和流,而webpack是基于入口文件,根据关系依赖引入文件,根据依赖图进行打包。
file-loader文件统一输出到指定文件夹,HTML中通过相对路径引用文件;
url-loader文件很小的情况下以 base64 的方式把文件内容注入到代码中;
module.rules
中配置。plugin则需要安装,引入模块,使用时需要new 实例对象;
可以做到不用刷新浏览器而将新变更的模块替换掉旧的模块
违法和不良信息举报电话021-丨全国旅游投诉热线12345丨
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。