如何成为别人嘴里的高级前端工程师?

要想成为一个高级前端工程师,很多人的答案都是:学习,不断地学习。

学习肯定是要学的,但是我们要怎么学习呢?

学习方式还是挺多的,我更推荐大家多看看比自己水平高的人,写的代码。遇到没见过的内容就立即学习学习。下面就给大家看看,我们为什么要看别人的代码!

场景1:数组拼接

let arr1 = [ a, b, c ]
let arr2 = [ 1, 2, 3 ]
/* 把 arr1 和 arr2 拼接到一起 */

 

普通程序员:

// 写法1:
let arr = arr1.concat( arr2 ) 
// 写法2 -- 使用遍历
let arr = arr1
arr2.forEach( item => {
 arr.push( item )
})

 

大神的代码:

let arr = arr1.push( ...arr2 )

 

场景2:吸顶效果 -- 网页中的某个元素,滚动到网页顶部时,固定在顶部。

普通程序员代码:

//添加滚动事件
window.addEventListener( 'scroll', this.handleScroll )
//获取元素距离顶部的距离
handleScroll () {
 var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
 var offsetTop = document.querySelector('#searchBar').offsetTop

 console.log( scrollTop )
//判断到达顶部的距离,等于0时,给元素添加固定定位,设置top的值
 if ( scrollTop > offsetTop ) {
  document.querySelector('#searchBar').style.position="fixed"
  document.querySelector('#searchBar').style.top="0"
 }else{
  //当距离大于0时,修改position属性值
  document.querySelector('#searchBar').style.position="relative"
 }
}

 

大神的代码:

#searchBar{
 position:sticky;
 top:0
}

 

值得注意的是,position:sticky;是新增属性,好多低版本浏览器不支持。所以不建议在PC端使用,可以在手机端使用。

场景3:高度设置

普通程序员代码:

.box{
 position:fixed;
 top:0;
 bottom:0;
 left:0;
 right:0
}

 

大神的代码:

.box{
 height:100vh;
}
// vh -> viewport height 

 

场景4:计算高度设置

普通程序员代码:

// 方法1:使用绝对定位
<div class="box">
 <header></header>    
 <div class="content"></div>
 </div>
<style>
 .box{
  position:relative;
 }
 header{
  position:fixed;
  top:0;
  height:40px;
  width:100%;
 }
.content{
 position:absolute;
 top:40px;
 width:100%;
 left:0;
}
</style>
// 方法2:使用 js 动态获取可视区高度,然后减去上边高度,动态设置content元素的高度

 

大神的代码:

.content{
 height: calc( 100%-40px )
}

 

使用 calc() 函数动态计算高度。

场景5:给根组件添加事件

普通程序员代码:

// 父组件代码
<div>
 <child @btnclick="btnClick" />  
</div>
<script>
 export default{
 methods:{
  btnClick(){
   console.log("子组件点击事件")
  }
  }
}
</script>

//子组件代码
<template>
 <div @click="clickEvent">
  子组件内容
 </div> 
</template>
<script>
 export default{
 methods:{
  clickEvent(){
   this.$emit( "btnclick" )
  }
 }
} 
</script>

 

大神的代码:

// 父组件代码
<div>
 <child @click.nactive="btnClick" />  
</div>
<script>
 export default{
  methods:{
   btnClick(){
    // 使用 .native 修饰符 给根元素添加事件
    console.log("子组件点击事件")
   }
  }
 }
</script>

 

场景6:js的防抖

普通程序员代码:

<input @change="search" v-model="val" />
export default{
 data(){
  return{
   val:''
  }
 },
 methods:{
  search(){
      //网络请求查询相关数据
    //只要input的值 val 改变,就会发送网络请求
  }
 }
}

 

大神的代码:

//  如果input输入框的值改变比较频繁的时候,就会不断的向服务器发送网络请求,
// 这样就会非常损耗性能,所以需要在一定时间内,多次频繁改变值的时候,只发一次网络请求

<input @change="search" v-model="val" />
export default{
 data(){
  return{
   val:''
  }
 },
 methods:{
  search(){
   //网络请求查询相关数据
   //只要input的值 val 改变,就会发送网络请求
   this.debounce(this.searchData,200)
  },
  searchData(){
  //向服务器发送网络请求
  },
  debounce(func,delay){
   let timer = null;
   return function(...args){
    if(timer)clearTimeout(timer)
    timer = setTimeout(()=>{
        func.apply(this,args)
    })
   }
  }  
 }
}

 

这样操作的话,就避免同时向服务器发送多次请求,减轻服务器压力。

场景7:数组去重

普通程序员代码:

function unique(arr){
 var res = [arr[0]];
 for(var i=1;i<arr.length;i++){
  var repeat = false;
  for(var j=0;j<res.length;j++){
   if(arr[i] == res[j]){
    repeat = true;
    break;
   }
  }
  if(!repeat){
   res.push(arr[i]);
  }
 }
 return res;
}

 

大神的代码:

function unique(arr){
 const res = new Map()
 return arr.filter((item)=>
  !res.has(item) && res.set(item,1)
 )
}

 

利用 ES6 的数组新增方法filter

场景8:css样式设置全局变量

普通程序员的代码:

// 假设主色调是 red
div{
 color:#666
}
.active{
 color:red;
}

 

一个网站、app或小程序等,都会有一个主色调,页面多处使用该颜色时,就需要写很多次。

大神的代码:

// 创建一个 base.css文件,代码如下:
:root{
 --color-text:#666;//普通字体颜色
 --color-high-text:red;//高亮文字颜色
}

// 样式文件
@import "assets/css/base.css";
div{
 color:var(--color-text)
}
.active{
 color:var(--color-high-text)
}

 

这样做的好处就是,可以通过base.css修改变量,这样只需要修改一处就可以控制项目的所有文件,大大节约开发时间。

 


好了小编今天的文章就到此结束了,喜欢我的可以点个关注哦!

上一篇:保留两位小数


下一篇:每日一练,整理CSS,JS前端面试题(11)