1、为什么 CSS 要放在头部,JS 要放在尾部?
因为现代浏览器为了更好的用户体验,它的渲染引擎是边解析 HTML,边渲染页面— —即会渲染不完整的 dom 树和 cssom,尽快减少白屏时间。
如果将 <script>
标签放在头部,会阻塞解析 dom,这样第一次渲染就会延后,所以将 js 放在尾部;
而 CSS 放在头部,是因为 js 文件会查询 CSS 的样式,所以要先加载 CSS 文件,再加载 js 。
2、跨域问题产生的原因?如何解决跨域问题?
(1)原因是浏览器的同源策略,即协议、域名和端口必须完全相同才能发起请求。
(2)用 express 解决(本质是 cores)
//解决跨域问题,不能写在app.use(bodyParser.json());上面
app.all('*',function (req, res, next) {
//写上跨域
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
//为上传图片新增
res.header("Content-Type", "application/json;charset=utf-8");
//浏览器为安全起见会提交两次
if (req.method == 'OPTIONS') {
//让options请求快速返回/
res.sendStatus(200);
}
else {
//往下寻找接口
next();
}
});
3、为什么主流用 cores 而不是 jsonp ?
(1)jsonp 只能用于获取资源( get 请求),而 cores 支持所有类型的 HTTP 请求。
(2)jsonp 的错误机制没有 cores (onerror)完善。
(3)jsonp 只发送一次请求,cores 面对复杂请求,为安全起见会请求两次。
(4)jsonp 对浏览器支持性好,cores 不支持 IE10 以下的版本。
4、有一个类如下:
function Person(name) {
this.name = name
}
let p = new Person('Tom');
(1)p._ _proto_ _
等于什么?
Person.prototype
(2)Person._ _proto_ _
等于什么?
Function.prototype
实例的 _ proto _ 属性(原型)等于其构造函数的 prototype 属性。
5、原型链,如题:
let foo={}
let F=function () { }
Object.prototype.a='value a'
Function.prototype.b='value b'
console.log(foo.a) //value a
console.log(foo.b) //undefined
console.log(F.a) //value a
console.log(F.b) //value b
思路:
(1)foo.a,因为 foo 本身没有属性,所以去 foo 的原型上找,foo._ proto _ = Object.prototype ,而 Object.prototype.a = 'value a' ,所以 foo.a = 'value a'
(2)而 Object.prototype.b 未定义,所以 foo.b 为 undefined
(3)F.a,同理,F._ proto _ = Function.prototype ,Function.prototype 上没有,所以去 Function.prototype 的原型上找,Function.prototype._ proto _ = Object.prototype,而 Object.prototype.a = 'value a' ,所以 F.a = 'value a'
(4)同理,所以 F.b = 'value b'
(完)
网友评论