码迷,mamicode.com
首页 > 其他好文 > 详细

前端笔试题

时间:2019-09-08 09:46:05      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:应用   信息   window   rand   index   port   改名   自动调用   运行   

第一题

<script>
      var a = 10;
      function test() {
            a = 100;
            console.log(a);      //100
            console.log(this.a)  //10
            var a;
            console.log(a)       //100
      }      
      test()     

      // 解题思路 :  变量提升   函数调用模式的this指向window 
</script>

 

第二题

<script>
      for(var i=1; i<10; i++){
            setTimeout(function(){
                  console.log(i)
            },1000)
      }
      // 输出9遍 10 

for(let i=1; i<10; i++){ setTimeout(function(){ console.log(i) },1000) } // 输出 1,2,3,4,5,6,7,8,9 </script>

 

第三题

<script>
      // 输出结果?
       var arr = [1,3,4,5,65,6]
       arr.forEach( i=>{
             console.log(i);
             if(i==5){
                  return 
             }
       })
      //  输出结果 1,3,4,5,65,6   
</script>

 

第四题

      什么是MVVM,常用的MVVM框架有哪些?
      M 表示model 模型 data中的内容   页面中所需的数据
      V 表示view  视图 模板中内容     html+css 静态页面
      vM 表示viewModel 视图模型,建立连接,实现双向绑定
      模型数据改变,视图自动更新;视图数据改名,模型数据自动更新
      vue react angular
 

      什么是MVC?
      M  model  模型
      V  view   视图
      C  controller  控制器  需要手动操作大量的DOM,数据是单向传送的

 

第五题

<script>
// 已知有以下数组,请将数组随机乱序
  let arr = [1,2,3,4,5]

// 方法一
  let newArr=[]
  for(let i = 0; i < Infinity; i++){
        if(newArr.length==5){// 如果 newArr 和 arr原始数组的长度一样,跳出循环
            break
        }
        let index = Math.floor( Math.random() * arr.length )   //随机获取数组下标
        newArr.push(arr[index])   // 将随机出来的元素添加到newArr中 
        arr.splice(index,1)       //删除添加过的元素 
  }
  console.log(newArr)

</script>

 

<script>
// 已知有以下数组,请将数组随机乱序
  let arr = [1,2,3,4,5]

// 方法二
  let newArr=[]
  for(let i = 0; i < arr.length; i++){
        let index = Math.floor( Math.random() * arr.length )   //随机获取数组下标
        newArr.push(arr[index])   // 将随机出来的元素添加到newArr中 
        arr.splice(index,1)       //删除添加过的元素 
  }
  var result = new Set( [ ...arr , ...newArr ] )
  console.log([...result])

</script>

 

第六题

      npm init 和 npm install vue 区别? 如何安装指定版本的js模块?
      npm init 是初始化项目,使用后会多出一个 package.json 的文件
      npm install vue 是安装vue
      使用 @ 可以指定版本 比如: npm i  jquery@3.0.0 

      全局安装?
      npm install xxx -g  //模块将被下载安装到【全局目录】中

      本地安装?
      npm install xxx //则是将模块下载到当前命令行所在目录

      信息写入?(安装的同时,将信息写入package.json中项目路径中)
      npm install xxx --save
      npm install xxx --save-dev  
      
      --save 将依赖包名称添加到 package.json 文件 dependencies 键下  (发布后依赖的东西)
      --save-dev 则添加到 package.json 文件 devDependencies 键下    (开房时候依赖的东西)

      --save 是你发布之后还依赖的东西
      --save-dev 是你开发时候依赖的东西

 

第七题

如何实现单页面同时适应  pc 和 移动端设备 ?
      @media 媒体查询
      /* 当屏幕小于等于100px的时候背景色为红色 */
@media screen and (max-width: 100px) {
    .example {background: red;}
}

/* 当屏幕在 200px -- 300px 的时候背景色为绿色 */
@media  screen and (min-width: 200px) and (max-width: 300px) {
    .example {background: green;}
}

 或者使用bootstrap中的媒体查询

 

第八题

vue中如何防止卡白屏?

原因? vue项目完成后一打包,js都放到了一起,由于js太庞大,加载变慢出现白屏(app.js太大)

解决?

当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。

使用路由懒加载,可以将js分别打包到不同的文件中。

使用骨架屏(vant)

 

 

 01  配置打包工具,将组件分别打包到不同的js代码块中

    biuld/weabpack.base.conf.js

        output:{

          chunkFilename:"[   ]"   //为了懒加载新增,配置后webpack将打包出多个js文件  

          }

    02  当路由请求到该组件时,才动态加载组件的内容

       引入组件时要改为

      import index from ‘./‘xxx  改为    const index=()=>import (‘./xxx‘)  仅定义函数  不执行

      当用户在vue中请求当前组件对应的路由地址时,由vue-router自动调用加载函数

 

第九题

简单描述一下前端优化的理解?

css放顶部,js放底部

精灵图,字体图标

压缩代码

前端你的优化在于减少DOM的操作和减少页面的重排重绘

 

 

第十题

call和apply的区别是什么?哪个性能更好一点?

call传参是一个一个传入  fn.call( obj , 10,20,30)

apply传参要用数组的形式[ ]   fn.apply( obj , [10,20,30] )

传参多的时候,call的性能要比apply稍好些。所以call的性能要优于apply,所以在开发时候,使用call,如果传入的参数是数组,可以使用...展开用算符传参  fn.call( obj , ...arry )

  

第十一题

代码性能测试 console.time(‘a‘)   console.timeEnd(‘a‘)

测试代码运行时间可以使用 console.time和console.timeEnd 来测试一段代码运行的时间 (火狐浏览器可以使用console.profile进行测试)
 
<script>

// 测试代码运行时间可以使用 console.time和console.timeEnd 来测试一段代码运行的时间
console.time(‘A‘)
for( let i=1 ; i<100; i++){

}
console.timeEnd(‘A‘)

// 输出结果:    A: 0.007080078125ms
     
</script>

 

第十二题

 实现 (5).add(3).minus(2) ,使其结果输出为6  

      如何实现 实例调取方法?  如何实现链式写法?
      想实现实例调取方法,只需要将方法 放到  当前实例所属类的原型上(比如数字实例要放到 Number上)
      想实现链式写法,就让当前方法执行完的返回结果还是当前这个类的实例,这样就可以继续调用其他方法了
<script>
/*
      arr.push()  arr数组之所以可以调用数组方法, 是因为 arr是Array的实例,可以调用Array.prototype 原型上的方法。push就是Array的方法

      jq源码中:给原型上添加方法
      [‘add‘,‘minus‘].forEach( elem=>{
            Number.prototype[elem] = eval(elem)
      })
*/


      //   5   +   3    -  2       =   6
// 实现 (5).add(3).minus(2) ,使其结果输出为6  
(function(){

      function check(n) {
            n = Number(n)
            return isNaN(n) ? 0 : n ; // 如果是NAN返回0 否则返回n
      }

      // 每一个方法执行完,都要返回Number这个类的实例,这样才可以继续调用Number类原型中的方法(链式写法)
      function add(n=0){
            n = check(n)
            return this + n;   //this指向5 ; 
      }

      function minus(n=0){
            n = check(n)
            return this - n;
      }

      Number.prototype.add=add;  //将add函数添加到原型中
      Number.prototype.minus=minus;//将minus函数添加到原型中

}());
console.log(  (5).add(3).minus(2) ) //  6

  
</script>

 

十三题

什么是回调函数:把一个函数B作为实参传递给另外一个函数A;函数A在执行的时候,可以把传递进来的函数B去执行(执行N次数)

function each(arr,callBack) {
      for( let i= 0; i < arr.length; i++){
            let item = arr[i];
            index = i;
            callBack( item , index )
      }
}
each( [1,2,3,4], function( item, index) { } )

 

十四题

      箭头函数和普通函数的区别是什么? 构造函数可以使用new生成实例,那么箭头函数可以吗?为什么?
箭头函数和普通函数的区别?
      01 箭头函数语法上比普通函数更简洁
      02 箭头函数没有自己的this,它里面的this继承函数所处上下文中的this(箭头函数中的this与外层函数的this一致)
         箭头函数中的this,使用call/apply等任何方式都无法改变this的指向(都和外层函数this一致)
      03 箭头函数中没有 arguments(类数组)
      04 箭头函数不能被new执行(普通函数 可以写成构造函数格式),为什么?因为箭头函数中没有this,箭头函数没有prototype
         箭头函数时没有this,也没有prototype,也没有arguments

 

十五题

 

前端笔试题

标签:应用   信息   window   rand   index   port   改名   自动调用   运行   

原文地址:https://www.cnblogs.com/javascript9527/p/11484093.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!