zoukankan      html  css  js  c++  java
  • 例题集锦

    1.分别用es5,es6输出0-9

     1   //es5
     2         var funcs = [];
     3         for(var i=0;i<10;i++){
     4             funcs.push((function(i){
     5                return function() {
     6                 console.log(i);
     7                }
     8                 
     9             }(i)))
    10         }
    11         //es6
    12         for(let i=0; i<10; i++){
    13             funcs.push(function(){
    14                 console.log(i);
    15             })
    16         }
    17         funcs.forEach(function(func){
    18             func()
    19         })
    View Code

     2.获取url地址参数值 已键值对方式存入json

    1  var url="http://vip.qq.com/a.php?a=1&b=3&c=4&d=5"//定义参数可以是无限的
    2             var arr=url.split("?")[1];           //根据?跟个url
    3             var arr2=arr[1].split("&");         //根据&重新分割参数
    4             var jsonarr={};                    //定义一个json对象放置url  参数
    5             for(var i=0;i<arr2.length;i++){   //循环将参数放到json里面
    6               jsonarr[arr2[i].substring(0,1)]=arr2[i].substring(2,3);
    7             }
    8  
    View Code

     3.说出以下函数的作用是?空白区域应该填写什么?

     1 // define  
     2 (function (window) {  
     3     function fn(str) {  
     4         this.str = str;  
     5     }  
     6     fn.prototype.format = function () {  
     7         var arg = ______;  
     8         return this.str.replace(_______, function (a, b) {  
     9             return arg[b] || '';  
    10         });  
    11     }  
    12     window.fn = fn;  
    13 })(window);  
    14 // use  
    15 (function(){  
    16     var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>');
    17     console.log( t.format('http://www.alibaba.com', 'Alibaba', 'Welcome') );  
    18 })();
    19 
    20 var arg=Array.prototype.slice.call(arguments,0);
    21 
    22 return this.str.replace(/{(d+)}/g, function (a, b) {  
    23     return arg[b] || '';  
    24 });
    View Code

     4.Promise相关的面试题

      1 1.
      2 
      3 const promise = new Promise((resolve, reject) => {
      4     console.log(1);
      5     resolve();
      6     console.log(2);
      7 });
      8 promise.then(() => {
      9     console.log(3);
     10 });
     11 console.log(4);
     12   输出结果为:1,2,4,3 13 
     14   解题思路:then方法是异步执行的。
     15 
     16 2.
     17 
     18 const promise = new Promise((resolve, reject) => {
     19   setTimeout(() => {
     20     resolve('success')
     21     reject('error')
     22   }, 1000)
     23 })
     24 promise.then((res)=>{
     25   console.log(res)
     26 },(err)=>{
     27   console.log(err)
     28 })
     29   输出结果:success
     30 
     31   解题思路:Promise状态一旦改变,无法在发生变更。
     32 
     33 3.
     34 
     35 Promise.resolve(1)
     36   .then(2)
     37   .then(Promise.resolve(3))
     38   .then(console.log)
     39   输出结果:1
     40 
     41   解题思路:Promise的then方法的参数期望是函数,传入非函数则会发生值穿透。
     42 
     43 4.
     44 
     45 setTimeout(()=>{
     46   console.log('setTimeout')
     47 })
     48 let p1 = new Promise((resolve)=>{
     49   console.log('Promise1')
     50   resolve('Promise2')
     51 })
     52 p1.then((res)=>{
     53   console.log(res)
     54 })
     55 console.log(1)
     56   输出结果:
     57 
     58     Promise1
     59     1
     60     Promise2
     61     setTimeout
     62 
     63   解题思路:这个牵扯到js的执行队列问题,整个script代码,放在了macrotask queue中,执行到setTimeout时会新建一个macrotask queue。但是,promise.then放到了另一个任务队列microtask queue中。script的执行引擎会取1个macrotask queue中的task,执行之。然后把所有microtask queue顺序执行完,再取setTimeout所在的macrotask queue按顺序开始执行。(具体参考https://www.zhihu.com/question/36972010)
     64 
     65  5.
     66 Promise.resolve(1)
     67     .then((res) => {
     68         console.log(res);
     69         return 2;
     70     })
     71     .catch((err) => {
     72         return 3;
     73     })
     74     .then((res) => {
     75         console.log(res);
     76     });
     77   输出结果:1  2
     78 
     79   解题思路:Promise首先resolve(1),接着就会执行then函数,因此会输出1,然后在函数中返回2。因为是resolve函数,因此后面的catch函数不会执行,而是直接执行第二个then函数,因此会输出2。
     80 
     81 6.
     82 
     83 const promise = new Promise((resolve, reject) => {
     84 setTimeout(() => {
     85 console.log('开始');
     86 resolve('success');
     87 }, 5000);
     88 });
     89  
     90 const start = Date.now();
     91 promise.then((res) => {
     92 console.log(res, Date.now() - start);
     93 });
     94  
     95 promise.then((res) => {
     96 console.log(res, Date.now() - start);
     97 });
     98   输出结果:
     99 
    100     开始
    101 
    102     success 5002
    103 
    104     success 5002
    105 
    106   解题思路:promise 的.then或者.catch可以被调用多次,但这里 Promise 构造函数只执行一次。或者说 promise 内部状态一经改变,并且有了一个值,那么后续每次调用.then 或者.catch都会直接拿到该值。
    107 
    108 7.
    109 
    110 let p1 = new Promise((resolve,reject)=>{
    111   let num = 6
    112   if(num<5){
    113     console.log('resolve1')
    114     resolve(num)
    115   }else{
    116     console.log('reject1')
    117     reject(num)
    118   }
    119 })
    120 p1.then((res)=>{
    121   console.log('resolve2')
    122   console.log(res)
    123 },(rej)=>{
    124   console.log('reject2')
    125   let p2 = new Promise((resolve,reject)=>{
    126     if(rej*2>10){
    127       console.log('resolve3')
    128       resolve(rej*2)
    129     }else{
    130       console.log('reject3')
    131       reject(rej*2)
    132     }
    133   })
    134   return p2
    135 }).then((res)=>{
    136   console.log('resolve4')
    137   console.log(res)
    138 },(rej)=>{
    139   console.log('reject4')
    140   console.log(rej)
    141 })
    142   输出结果:
    143 
    144     reject1
    145     reject2
    146     resolve3
    147     resolve4
    148     12
    149 
    150   解题思路:我们上面说了Promise的先进之处在于可以在then方法中继续写Promise对象并返回。
    151 
    152 8.重头戏!!!!实现一个简单的Promise
    153 function Promise(fn){
    154   var status = 'pending'
    155   function successNotify(){
    156       status = 'fulfilled'//状态变为fulfilled
    157       toDoThen.apply(undefined, arguments)//执行回调
    158   }
    159   function failNotify(){
    160       status = 'rejected'//状态变为rejected
    161       toDoThen.apply(undefined, arguments)//执行回调
    162   }
    163   function toDoThen(){
    164       setTimeout(()=>{ // 保证回调是异步执行的
    165           if(status === 'fulfilled'){
    166               for(let i =0; i< successArray.length;i ++)    {
    167                   successArray[i].apply(undefined, arguments)//执行then里面的回掉函数
    168               }
    169           }else if(status === 'rejected'){
    170               for(let i =0; i< failArray.length;i ++)    {
    171                   failArray[i].apply(undefined, arguments)//执行then里面的回掉函数
    172               }
    173           }
    174       })
    175   }
    176   var successArray = []
    177   var failArray = []
    178   fn.call(undefined, successNotify, failNotify)
    179   return {
    180       then: function(successFn, failFn){
    181           successArray.push(successFn)
    182           failArray.push(failFn)
    183           return undefined // 此处应该返回一个Promise
    184       }
    185   }
    186 }
    View Code

     5.js数组排序,去重

     1 1.数组排序
     2   1)  var ary = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0];
     3         console.log(ary.sort(fn));
     4         function fn(a, b) {
     5             return b - a;  //降序
     6         }
     7 2)var arr = [1,2,3,4,5];  // 数组存储的数据
     8         for (var i = 0; i < arr.length - 1; i++) {  // 比较的次数
     9             for (var j = 0; j < arr.length - 1 - i; j++) { // 前后交换的次数
    10                 if (arr[j] < arr[j + 1]) {  // 判断大小
    11                     var temp = arr[j];  // 若判断的结果为真,则交换两个变量,若为假,直接进行下次比较
    12                     arr[j] = arr[j + 1];
    13                     arr[j + 1] = temp;
    14                 }
    15             }
    16         }
    17 2.数组去重
    18 1)遍历数组法
    19 var arr=[2,8,5,0,5,2,6,7,2];
    20 function unique1(arr){
    21   var hash=[];
    22   for (var i = 0; i < arr.length; i++) {
    23      if(hash.indexOf(arr[i])==-1){
    24       hash.push(arr[i]);
    25      }
    26   }
    27   return hash;
    28 }
    29 2)优化遍历数组法(推荐)
    30 function unique4(arr){
    31   var hash=[];
    32   for (var i = 0; i < arr.length; i++) {
    33     for (var j = i+1; j < arr.length; j++) {
    34       if(arr[i]===arr[j]){
    35         ++i;
    36       }
    37     }
    38       hash.push(arr[i]);
    39   }
    40   return hash;
    41 }
    42 3) function unique5(arr){
    43   var x = new Set(arr);
    44  return [...x];
    45 }
    46 3.数组重复值最多
    47 // 不用reduce时: 
    48     var arr = ["apple","orange","apple","orange","pear","orange"]; 
    49     function getWordCnt(){ 
    50         var obj = {}; 
    51         for(var i= 0, l = arr.length; i< l; i++){ 
    52             var item = arr[i]; 
    53             obj[item] = (obj[item] +1 ) || 1; 
    54         } 
    55         return obj; 
    56     }
    57     console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}
    58     // 用reduce时: 
    59     var arr = ["apple","orange","apple","orange","pear","orange"]; 
    60     function getWordCnt(){ 
    61         return arr.reduce(function(prev,next){ 
    62             prev[next] = (prev[next] + 1) || 1; 
    63             return prev; 
    64         },{}); 
    65     } 
    66     console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}
    67 2)es6
    68 let ary = ['赵', '钱', '孙', '孙', '李', '周', '李', '周', '李'];
    69 
    70 ary.forEach(k => !d[k] ? d[k] = 1 : d[k]++);
    71 
    72 const max = Object.keys(d).sort((a, b) => d[b] - d[a])[0];
    73 
    74 console.log(max)
    View Code
  • 相关阅读:
    adobe acrobat 无效批注对象
    分享下今天研究的流量上限DDos攻击分析和解决方式
    【二】【HTML列表、表格与框架】
    大话计算机中的流水作业
    texinfo
    texindex
    texi2dvi
    tex, virtex, initex
    testprns printername [printcapname]
    testparm
  • 原文地址:https://www.cnblogs.com/bgd150809324/p/11352985.html
Copyright © 2011-2022 走看看