美文网首页
JavaScript基础知识5点(2018.12.29)

JavaScript基础知识5点(2018.12.29)

作者: 小进进不将就 | 来源:发表于2019-01-02 09:19 被阅读0次

    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'


    (完)

    相关文章

      网友评论

          本文标题:JavaScript基础知识5点(2018.12.29)

          本文链接:https://www.haomeiwen.com/subject/qbhelqtx.html