多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[toc] # 题1、什么是闭包? 答:在一个函数中返回一个函数就会形成一个闭包。 在闭包的外层函数中定义的变量会被这个闭包保护起来,所以其实我们使用闭包其实就是为了得到一个 `能够被保护起来的全局变量` 。 闭包中这个变量的特点:1. 受保护(只要被闭包中的代码修改) 2. 长驻内存(不会像普通的局部变量一样,用完就销毁了) 所以闭包变量即有全局变量的优点(随处可用并且长驻内存)又有局部变量的优点(只能在函数内使用) 应用场景: 1. 维护一个全局的自增 ID(如果使用全局变量,有可能会出现被误操作,而使用了闭包,就可以确保ID不会被外部误操作,而且只能进行+1操作) 2. 缓存一些数据也可以使用闭包(比使用全局变量好,可以避免被误操作) ~~~ // 自增 id 的闭包(好处1. 不会被闭包修改 好处2:只能进行+1操作) function id(){ let id = 1 // 闭包变量 return function() { return id++ } } // 当我们需要 ID 时就使用闭包 let id= id() console.log( id() ) // 1 console.log( id()) // 2 console.log( id()) // 3 ~~~ # 题2、eval 是干什么用的? 答:是 JS 中的一个函数,用途:把一个字符串当做 JS 代码来执行。 ~~~ const str = "var age = 100;" // 把 str 字符串解析成 JS 代码并执行 eval(str) // 相当于执行了 var age = 100 这行代码 console.log( age ) // 100 ~~~ # 题3、正则表达式中的 g 代表什么? 答:g:全局匹配:匹配所有满足条件的字符。 ~~~ let a = 'a3232fafda32' a.replace(/\d/, '*') // a*232fafda32 a.replace(/\d/g, '*') // a****fafda** (全局匹配) ~~~ # 题4、HTTP 请求有哪些?用过哪些? HTTP协议中规定在请求一个资源(网页、图片、音乐、JS、CSS等)时,使用的请求方法:共8种: GET:获取数据。 POST:新增。 DELETE:删除。 PUT:修改 .... 示例: ~~~ // 规范(不是强制)的用法:比如:http://api.abc.com/users GET http://api.abc.com/users?page=1&pagesize=20 :获取用户信息(参数在URL后) POST http://api.abc.com/users:添加一个用户,(数据在 body 中传递) DELETE http://api.abc.com/users?id=1:删除一个用户(参数在URL后台) PUT http://api.abc.com/users?id=2 :修改一个用户(参数在URGL和BODY中传,URL中传ID,body 中保存数据) ~~~ # 题5、HTTP常用的状态码? 2XX 成功: 200(成功) 201(创建成功) 3XX 重定向: 301(永久重定向) 302(临时重定向) 4XX 客户端错误 :400(请求时参数错误) 401(未登录) 403(无权限-超级管理员-会计等) 404(服务器上没有这个资源) 5XX 服务器错误 : 500(服务器错误-后台代码出错) # 题6、实战? 有一个数组,数组a中有100个元素,数组b中有10个元素,数组b中保存的是a中的10个元素 的下标,现在要从A中把b中这10个下标删除掉怎么写? 注意点:当从a中删除一个元素之后,后面元素的下标就变了。 答:因为删除一个元素时,后面的元素会向前移,导致下标改变,所以我们应该从后向前删除,具体做是先将B数组倒序(大的在前)(所以在删除时先删除大(从后开始删除)的)排列然后再循环调用a数组的 splice方法 删除。 ~~~ var a = [1,2,3,32,5,34,3.....] var b = [3,7,2,4,9,56,43,23,12,32] b.sort((a,b)=>b-a) b.forEach(v=>{ a.splice(v, 1) }) ~~~