网站的建设与应用,网络销售怎么做网站,产品设计公司运营,南宁青秀万达网站建设01、null和undefined
undefined是全局对象的一个属性#xff0c;当一个变量没有赋值或者访问一个对象不存在的属性#xff0c;这时候都是undefined。
null#xff1a;表示是一个空对象。在需要释放一个对象的时候#xff0c;直接赋值为null即可。
02、箭头函数
箭头函数…01、null和undefined
undefined是全局对象的一个属性当一个变量没有赋值或者访问一个对象不存在的属性这时候都是undefined。
null表示是一个空对象。在需要释放一个对象的时候直接赋值为null即可。
02、箭头函数
箭头函数是ES6新增的简化函数的定义。箭头函数没有自身的this所以this是从外部获取的也就是继承了外部的执行上下文。
箭头函数不能作为构造函数如果通过call()或者apply()调用箭头函数的时候不需要绑定this直接传入参数即可。
03、call、apply和bind的作用
bind、call和apply都是改变函数this的指向。 bind在改变this的时候返回的是一个改变执行上下文的函数不会立即执行。 call和apply在改变this指向同时也执行该函数。 bind只有一个参数call和apply可接收多个参数第一个参数是this的指向。apply的第二参数是一个数组。
04、函数的this
this是函数的执行上下文分为全局执行上下文和函数执行上下文。
this在严格模式下指向的是undefined非严格模式下默认指向window。
函数的this在函数被调用的时候指向的是函数的调用者也就是谁调用就指向谁。
如果通过new 构造函数创建一个新的对象那么构造函数的中的this指向新对象本身。
普通函数不继承this箭头函数没有this它是继承外部的this。
05、变量提升
变量提升是指js的变量和函数在编译的时候提升到最前面。
造成变量提升的现象是因为使用var关键字声明的变量变量提升的时候只有声明在提升变量赋值并没有提升在变量初始化之前访问该变量就会返回undefined。使用let或者const声明变量就形成暂时性死区在let或者const声明变量之前访问变量会报错。
06、map和forEach的区别
map有返回值可以开辟新的空间return返回一个长度和原数组长度一样的新数组。
forEach函数没有返回值返回的undefined。
map的处理速度比forEach快返回新数组这样方便链式调用其他数组方法比如filter、reduce等等。
07、怎么理解事件循环、微任务和宏任务
浏览器的事件循环是执行js代码的时候遇见同步任务直接推进调用栈中执行遇到异步任务时候将异步任务挂起等到异步任务有返回之后再推到任务队列中。
当调用栈中所有的同步任务执行完成将任务队列中的任务按照顺序执行。重复执行这一系列的行为就是事件循环。
异步任务又分为宏任务和微任务。宏任务就是任务队列中的任务每一个宏任务中包含一个微任务队列
微任务就是等宏任务中的主要功能执行完成后渲染引擎并没有立即执行下一个宏任务而是执行当前宏任务中的微任务。
宏任务包含script标签内的代码、定时器、Ajax请求
微任务Promise
08、跨站点请求伪造CSRF
攻击者盗用用户的身份以用户的身份发起恶意请求。但是对于服务器来说这个请求是合理的。
预防CSR攻击方法
使用验证码强烈要求用户和应用进行交互在http中referer字段检查是否是从正确的域名访问过来它记录了http请求的来源地址使用token验证在http请求头中添加token字段在服务器端设置一个拦截器来验证token如果token无效那么拒绝访问
09、XSS攻击
XSS攻击是脚本攻击攻击者通过向web页面插入script代码在用户浏览这个页面时候执行script的脚本代码达到攻击的目的。
预防对数据进行严格的输出编码比如URL编码、css编码、JavaScript编码。
10、浏览器如何渲染页面的
浏览器从服务器获取到html后将html转化为DOM树再将css样式转化为对应的stylesheet根据DOM树和stylesheet绘制成页面。