1、跨域的解决方案。
答:只记得做的一个比较老的项目,里面用的是 配置代理用来转发请求, 从而实现跨域。
又问还有哪些新方法?其实我都没看这个点,就说了不知道。
跨域:因为浏览器同源策略的限制,当前域名的js只能读取同域下的窗口属性。
当浏览器从一个“域”向另一个“域”的服务器发出请求,来访问另一个“域”上的资源,请求 url 的协议名、域名、端口号有任意一个与当前页面url 的不同,就是跨域。
解决方法:
- 使用 jsonp ,即 json with padding(内填充),利用<script>标签可以跨域的特性,通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的callback函数,并把我们需要json数据作为参数传入。JSONP只支持GET请求,优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。
- 在服务器端设置跨域资源共享 CORS(Cross-Origin Resource Sharing),设置 Request Header 头中 Access-Control-Allow-Origin 为指定可获取数据的域名;CORS支持所有类型的HTTP请求。
- 图片ping,直接请求一张图片;
- 找”爸爸”:通过修改document.domain来跨子域;只适用于两个窗口(iframe)之间的跨域。
- 哥俩好:通过window.name来跨域接收数据;只适用于两个iframe之间的跨域。
- 使用HTML5的window.postMessage方法跨域。
- nginx反向代理。
2、箭头函数的理解,使用注意事项。
ES6 的新特性,定义函数时删掉了原函数的“function”关键字和函数名,使用“=>”连接参数列表和函数体。
箭头函数的this总结如下:
-
箭头函数不绑定this,箭头函数中的this相当于普通变量,寻值行为与普通变量相同,在作用域中逐级寻找。
-
箭头函数的this指向其父作用域,无法通过bind,call,apply来直接修改(可以间接修改作用域中this指向)。
-
函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
注意:
(1) 箭头函数没有原型属性,所以箭头函数本身没有this,也就无法通过bind,call,apply去改变this的指向;
(2) 没有arguments,如果要用,可以用 rest 参数代替;
(3) 不能作为构造函数,不能使用new;
(4) 不可以使用yield
命令,因此箭头函数不能用作 Generator 函数。
3、promise 的理解,使用场景。
ES6 的新特性,Promise 是一个构造函数,用来封装异步操作,解决异步编程中回调地狱的问题。
- 在异步代码外面包裹一层构造函数,生成 promise 对象;
- 构造函数中状态变化(resolve/reject),执行结果以参数形式传递出来;
- promise 对象的 then 方法接受结果,并进行处理。
使用场景:
promise 结合 ajax,如 Axios库;
promise.all();
promise.race()。
4、object 的 defineProperty
Object.defineProperty ( obj对象, prop属性名, descriptor属性描述符 )
该方法是给对象定义一个新属性或者修改一个已有的属性。
5、CSS 选择器的权重
从低到高分为 5 档:
通配符、子选择器、相邻选择器 0
标签、伪元素选择器 1
类、伪类、属性选择器 10
id 选择器 100
内联样式 1000
继承的样式没有权值,!important 的优先级最高。
比较规则:多个选择器的权重相加,但不进位。最高级有四位,从最高位的左边向右逐个等级比较,同一等级上的数字大的就比较大,前一等级相等才往后比。
问面试官
业务上需要的技术栈:React、Node 比较多。
(然而都是我不熟的)
总结:一开始都不太懂提前批的含义,其实就是正式春招是通过系统走流程的,在系统里只能选一个部门来面试。所以在开放系统之前,提前批可以多尝试几个部门的面试。然而我放假在家堕落着,只发了一个简历试试水。说是集中面试,那天就直接打电话过来直接问了十几分钟,完全没有准备,回答的稀里糊涂的,然后自己越说越紧张。。。
可以看出来,面试官是问一些经典的问题,考察一下基础和知识覆盖面吧。