知识点

143 阅读5分钟

DOM

mouseover,mouseout 和 mouseenter,mouseleave区别

  1. 盒子中有后代元素的,我们尽可能用mouseenter,mouseleave
  2. 需要基于冒泡传播干什么事情,我们只能用mouseover,mouseout


javascript

let和var区别

  1. let没有变量提升(但是在词法解析阶段也得知某个变量是否是私有变量)
  2. let不允许在相同的作用域下重复声明
  3. let解决了JS中的暂时性死区问题
  4. let创建的全局变量没有给window设置对应的属性
  5. let会产生块级作用域

new执行过程

  1. 创建一个私有的栈内存
  2. 形参赋值&变量提升
  3. 浏览器会创建一个对象出来(这个对象就是当前构建函数的一个实例),并且让函数的this指向这个实例对象 =>构造函数模式中,方法中的this就是当前类的实例
  4. 执行代码
  5. 在我们不设置return的情况下,浏览器会把创建的实例对象默认返回,如果设置了return ,返回的是一个复杂数据类型,会返回这个复杂数据类型

当用户在地址栏输入网址,到最后看到页面,中间都经历了什么

  1. URL地址解析
    URL(Uniform Resource locator)统一资源定位符,根据这个地址能找到对应的资源;
    URN(Uniform Resource Name)统一资源名称,一般指国际上通用的(标准的)一些名字(例如:国际统一发版的编号)
    URI(Uniform Resource Identifier)统一资源标识符,URL和URN是URI的子集

    协议:传输协议就是,能把客户端和服务端通信的信息,进行传输的工具
    http:超文本传输协议,除了传递文本,还可以传递媒体资源文件(或者流文件)及XML格式数据
    https:更加安全的http,一般涉及支付的网站都要采用https协议(s:ssl加密传输)
    ftp:文件传输协议(一般用于把本地资源上传到服务器)
    域名(www.qq.com):一个方便用户记忆的名字(不通过域名,直接用服务器的外网IP也能访问到服务器,但是外网IP很难被记住)
        顶级域名:qq.com
        一级域名:www.qq.com
        二级域名:sports.qq.com
        .com 国际域名 .cn中文域名  .edu教育  .gov政府 .io博客 .org官方组织 .net系统类
    端口号(80):端口号取值范围(0-65535),用端口号来区分同一台服务器上的不同项目
        http默认端口80
        https默认端口443
        ftp默认端口21
        如果项目采用的就是默认的端口号,我们在书写地址的时候,不用加端口号,浏览器在发送请求的时候会帮我们默认加上
    请求资源路径(/index.html):
        默认路径或者名称(xxx.com/不指定资源名,服务器会找默认的资源,一般默认资源名是default.index,index.html....当然这些可以在服务器端自己配置)
        注意伪URL地址的处理(URL重写技术是为了增加SEO搜索引擎优化的,动态的网址一般是不能被所搜引擎收录,所以我们把动态网站地址静态化,此时需要重写URL)
    https://item.jd.hk/2688449.html => https://item.jd.hk/index.php?id= 2688449
    问号传参信息(?from=wx&lx=1):
        客户端想把信息传递给服务器有很多方式
            URL地址问好传参
            请求报文传输(请求头和请求主体)
        也可以不同页面之间信息交互,
    HASH值(#zhang):
        也能充当信息传输的方式
        锚点定位
        基于HASH实现路由管控(不同HASH值,显示不同的组件和模块)

    编码解码:请求地址中如果出现非有效的UNICODE编码内容,现代版浏览器会默认的进行编码
    1.基于encodeURL编码,我们可以基于decodeURL解码,我们一般用encodeURL编码的是整个URL,这样整个URL中的特殊字符都会自动编译
    2.encodeURLComponent/decodeURLComponent他相对encodeURL来说,不用给整个URL编码,而是给URL部分信息进行编码(一般都是问号传参的值编码)
    客户端和服务端进行信息传输的时候,如果需要把请求的地址和信息编码,我们则基于以上两种方式处理,服务器端也存在这些方法,这样就可以统一编码解码了
    3.客户端还存在一种方式,针对中文的编码方式,escape/unescape,这种方式一般只会应用于客户端页面之间自己的处理,例如从列表跳转到详情,我们可以把传递的中文信息基于这个编码,详情页获取编码后的信息再解码,再比如我们在客户端中的cookie信息,如果信息是其中文,我们也可以基于这种办法编码

  2. DNS域名解析
      DNS服务器:域名解析服务器,在服务器上存储着 域名=>服务器外网ip 的相关记录
    而我们发送请求的时候所谓的DNS解析,其实就是根据域名,在DNS服务器上查找到对应的服务器的外网IP
      DNS优化:
        DNS缓存(一般浏览器会在第一次解析后,默认建立缓存,时间很短,只有一分钟左右)
        减少DNS解析次数(一个网站中我们需要发送请求的域名和服务器尽可能减少)
        DNS预获取(dns-prefetch):在页面加载开始的时候,就把当前页面中需要访问其他域名(服务器)的信息进行提前DNS解析,以后加载到具体内容部分就可以不用解析了
  3. 和服务器建立TCP连接

  4. 把客户端信息传递给服务器(发送http请求)
  5. 服务器得到并处理请求(HTTP响应内容)
  6. 客户端渲染服务器返回的内容
  7. 和服务器断开TCP连接