前端面试--js代码片段(基础中的基础,持续更新中)

5 篇文章 0 订阅
1 篇文章 0 订阅

代码片段1:

 var arr1 = [1,2,3,4,5]
   var arr2 = []
    for(var i = 0; i < arr1.length; i ++) {
      arr2.push(function(){   
        alert(i)
      })
    }
    arr2[0]()   

此代码在调用arr20方法以后,输出都是5;
执行的顺序是:for循环遍历i为01234;然后调用了5次function函数,但是并没有执行。只在最后的arr20调用,所以,无论[Num]写的几,alert都是5。

代码片段2

   var x = 3;
   var foo = {
     x: 2,
     baz: {
       bar: function() { 
         return this.x 
       }
     }
   }
   Object.prototype.x = 20
   var go = foo.baz.bar  //  函数体
   console.log(go())     //  3
   console.log(foo.baz.bar())  //  undefined

本题考查的是对this指向的理解,与实际运用。
第一个log是把包含this的函数体赋值给了变量go,该变量前无引用,所有默认指向window,故为3;
第二个log,把包含this的函数体指向了foo.baz;但是该部分没有x值,故为undefined。

代码片段3:
请写出一段去除空白字符的原型方法:

 String.prototype.trim = function(){
   // return this.replace(/\s/g, "");
    return this.split(" ").join("") 
   }        
  console.log('a a bc de f'.trim())

这种题也是面试常见题 ,大家要加油!

代码片段4:

 var a = 1
 function test(){
     a=3
     return 
     function a(){

     }
   }
   test();
   console.log(a, '--a--')//1

这里的function a() {} 等于 var a = function(){} , 用var声明a,相当于把函数体内部的a私有化了,所以,log的时候,a为1.

代码片段5
排序题也会必考的哦!请根据传入的参数n( ) 对一堆数组(纯数字)按照距离n最近的顺序排列(距离即使数字与n的 差值的绝对值)

  var arr = [7, 28, -1, 0, 11, 33]
  var sortNum=[]
     function sort(n){
       for(let i = 0; i<arr.length; i++){
         for(let j = i+1; j<arr.length; j++){
           if(Math.abs(arr[i] - n) > Math.abs(arr[j] - n)){
             console.log(123)
             let _temporary = arr[i]
             arr[i] = arr[j]
             arr[j] = _temporary
           }
         }
       }
     console.log(arr, '--排序以后---')
     }
     sort(8)

代码片段 6
关于正则的一些补充

var str = ' 1中 国我爱你123abc~ . '
var test = (/^1$/g).test('1') //正则.test(字符串);返回true或者false
var test1 = str.search(/\d/)//查找第一个数字的下标
var test2 = str.match('他')//找到返回下标,未找到返回null
var test3 = str.replace(/\s/g, '*')//替换,把所有的空白字符替换成*

console.log(test2, '--str--')
/d --所有数字 
/D --除了数字以外
/s -- 空格
/w -- 字母?
/W -- 除了字母
g -- 全局查找
i -- 不去分大小写

代码片段 7

//数组去重
  var arr = [1,2,2,3,3,4,5]
   arr1=[]
   for(let i = 0; i < arr.length; i ++) {
     if(arr1.indexOf(arr[i]) < 0) {
       arr1.push(arr[i])
     }
   }
   console.log(arr1)
--或 -- 
利用set自带去重属性
 console.log([...new Set(arr)])

代码片段 8

统计字符串中,字母次数
var str = 'aaabbcqweqweqwe'
obj = {}
for(var i =0; i<str.length; i ++ ) {
  var v = str.charAt(i)
  if( obj[v] == undefined ){	//遍历对象中当前键是否存在
    obj[v] = {}
    obj[v].count = 1;
    obj[v].value = v;
  }else {
    obj[v].count = ++ obj[v].count
  }
}

for(key in obj){
  document.write(obj[key].value +'='+obj[key].count+'&nbsp;'); // a=4  b=3  c=4  d=2  f=1  g=1  h=1 
} 

代码片段9:

 var b
 console.log(b, '---b---')  // 没定义,没赋值 ,此时报undefined
 console.log(c, '--c--')    //没声明,报c is not defined

代码片段9:

       var a = 1
       if(!(b in window)){ //此时b为undefined,undefined为windows环境下的一个全局变量
         var b = 2
         a += 1
       }else {
         a += 2
       }
       console.log(a)//3
       console.log(b)//undefined
       
  注意: 如果此时,在if条件语句的上方声明b变量并赋值,则b in window结果为false。

代码片段10:

console.log(a,'--a1--')      //var: undefined          
console.log(b, '---b---')    //let:b is not defined;    (临时性死区)
var a = 2 
let b = 1


function test() {
 //函数作用域最顶端,TDZ开始
  //这个期间内的任何对变量的操作都会报:ReferenceError引用错误
  console.log(a, '--1---')  //ReferenceError引用错误
  //遇到let后,TDZ结束
  let a 
  console.log(a, '----2---')  //undefined
  a = 3
  console.log(a, '-----3----')  //3
}
test()

代码片段11:

var a = 1
 function test() {
   var a = 2   //此处将同名变量a私有化了
   return function (){
     a += 1
   }
 }
 var log = test()
 log()
 console.log(a) // 1  因为访问不到局部变量a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值