总结篇(一) -- 基础知识

移动端适配

  1. 使用 <meta> 标签

    <meta name='viewport' content=' width=device-width user-scalable=no initial-scale=1.0 maximun-scale=1.0 minimum=1.0 ' >
    
    

    这个标签主要作用是网页宽度默认等于屏幕宽度,用户不可以缩放,缩放比例1。

  2. 使用 Media Query(媒体查询) 模块
    通过媒体查询,从而判断采用的样式
    主要是有两种方式:

    • <link> 元素中的媒体查询

         <link rel='stylesheet' href='./css/style.css' media='(min-width: 800px) and (max-width: 1400px)' >
      
      

      这个标签表示只有 width 在 800px-1400px 时才采用 style.css 这个样式表

    • 样式表中的媒体查询
      在样式表中书写媒体查询

        @media (max-width: 414px){
            .button{
                display: block;
            }
        }
      
      

      上述代码表示:当宽度小于 414px 的时候,button 元素显示在页面中

  3. 动态rem
    一切以宽度为基准。
    rem是根元素(html)的 font-size 的值,我们可以使用 JS 实现将 html 的 font-size 设置为屏幕宽度,之后 rem 就和屏幕宽度有一定的映射,当然也可以设置为屏幕宽度的 1/2 ,之后使用 rem 实现元素的宽高 margin padding 等需求。

  4. 在做移动端适配的时候还要注意一些小问题

    • 移动端没有 hover 事件,但是有 touch 事件
    • 移动端没有 resize 事件,没有滚动条
    • rem 单位可以和其他单位混用,例如:border: 1px solid red

闭包

  1. 闭包指一个函数或函数的引用与一个引用环境绑定在一起,这个引用环境是一个存储该函数每个自由变量的表。简单的说就是自由变量和引用这个自由变量的函数就是闭包。闭包可以读取其上作用域链中的值。

     var a = 1
     function fn(){
         console.log(a)
     }
     fn.call(undefined)   // 调用之后,会打印出1
    

    上述的变量 a 和函数 fn 即是闭包

  2. 当我们在写代码的时候,会在无形之中就使用到了闭包。

  • 用途一:读取其上作用域链中的值。例如在全局作用域中定义了 a 和函数 fn,在 fn 中并没有定义 a ,但是却可以使用全局变量 a。参照上面例子。

  • 用途二:让自由变量保存在内存中,即封装变量
    在全局代码执行的时候,会产生一个全局执行上下文环境(Execution Context)。调用函数的时候,会产生一个函数执行上下文环境(Execution Context)。当函数调用结束后,函数执行上下文环境和其中的数据将被消除,重新回到全局执行上下文环境。但是当在函数执行上下文的环境中存在闭包,那么即使这个函数调用完成,其执行上下文环境也不会被消除,因为还有闭包被引用着。

    function fn1(){
       var a = 1
       addA = function(){  // 此处不用 var 声明,从而创建一个全局变量,但是其可以引用局部变量 a 
           a++
       }
       function fn2(){
           console.log(a)
       }
       return fn2
    }
    result = fn1.call(undefined)
    result()  // 打印出 1
    addA()
    result()  // 打印出 1
    

    当调用完 fn1 之后,局部变量 a 并不能被垃圾回收,因为 fn1 返回的函数仍然调用局部变量 a ,此时的局部变量 a 就被保存在内存中

    在函数内部定义局部变量,外部不能访问,但是闭包仍能访问到这个局部变量,外部如果要访问局部变量,只能通过函数 return 出来的接口。

call、apply、bind

这三个方法都挂载在 Function.prototype 上,都是函数的方法,可以调用函数

call()

  • 作用:
    切换上下文(this)
    操作参数

  • 当使用 call() 调用一个函数的时候,call() 的第一个参数是 this ,第二个参数是需要传递给函数的实参(arguments)。

    fn.call( this , arguments )
    

apply()

  • 作用:

    切换上下文(this)
    操作参数

  • 当使用 apply() 调用一个函数的时候,apply() 的第一个参数是 this,第二个参数是一个数组,apply() 方法会将数组中的元素拆分依次传入到函数中。

    fn.apply( this , [ 1,2,3 ] )
    

bind()

  • 作用:

    切换上下文(this)
    科里化,即部分求值,函数调用是可以传递参数,之后返回的函数(闭包)也可以接收参数

  • 当使用 bind() 调用一个函数的时候,bind() 方法会返回一个函数,他的第一个参数是 this ,第二个参数是需要传递给函数的实参

    let curryFn = fn.bind( this , param1 , param2 )
    curryFn( param3 , param4 )
    

HTTP POST 请求

1 POST /path HTTP/1.1
2 Host: passport.baidu.com
2 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36
2 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
2 Content-Length: 24
2 Content-Type: application/x-www-form-urlencoded
3
4 username=ff&password=123

数组去重

对象键值对法。遍历数组时看对象中是否有 key

function unique(arr){
     var newArray = []
     var obj = {}
     for( var i = 0, len = arr.length; i < len; i++ ){
         if( !obj[ arr[ i ] ] ){
             obj[ arr[ i ] ] = 1
             newArray.push( arr[ i ] )
         }
     }
     return newArray
 }

Set 对象

function unique(arr){
    return newArr = Array.from(new Set(arr))
}

数组下标判断。遍历数组是看相应值的下标是否和索引相同

function unique(arr){
     let newArray = []
     arr.forEach( (value,index) => {
         if( array.indexOf( value ) === index ){
             newArray.push( value )
         }
     } )
     return newArray
 }

遍历数组法。遍历数组时看新数组中有没有该值

function unique(arr){
     let newArray = []
     arr.forEach( (value,index) => {
         if( !newArray.includes( value ) ){
             newArray.push( value )
         }
     } )
     return newArray
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342