笔试题整理(八)

拼多多

一、

求以下代码的输出结果

 function test(a,b,c){
              a=a*10;
              b.item=5;
              c={item:5};
          }
          var x=10;
          var y={item:10};
          var z={item:10};
          test(x,y,z);
          ①console.log(x);
          ②console.log(y.item);
          ③console.log(z.item);

答案:10 5 10
分析:这道题考查的是js中参数的传递问题。
在ECMAScript中,所有函数的参数都是按值传递的。
①向参数传递基本类型的值时,被传递的值会被复制给一个局部变量,局部变量的改变不会影响到函数外部原来变量的值。
②向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,这个局部变量的变化会反映在函数外部。
③向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,如果在函数 内部重写了这个变量时,这个变量引用的就是一个局部对象,指向一段新地址,这个局部对象会在函数执行完毕后立即被销毁,但是原始的引用不受影响。

二、

求以下代码的打印结果:

console.log(['123',2,3].map(parseInt));

答案:[123,NaN,NaN]
分析:为什么????????

三、

以下代码的输出结果是什么?

console.log(
              (function(x){
                  delete x;
                  return x;
              })(2)
          );

答案:2。
分析:
delete的用法
①delete可以删除对象的属性

var obj={attr:1};
delete obj.attr;
console.log(obj.attr);//undefined

②delete不能删除变量

var x=1;
delete x;
console.log(x);

③delete不能删除函数

function fn(){}
delete fn;
console.log(typeof fn);

四、将两个有序数组进行归并排序

function merge(arr1,arr2){
    //创建保存结果的数组
    var result=[];
    //创建两个指针,分别指向数组中当前较小的数字
    var index1=0;
    var index2=0;
    while(index1<arr1.length&&index2<arr2.length){
        if(arr1[index1]<=arr2[index2]){
            result.push(arr1[index1]);
            index1++;
        }else{
            result.push(arr2[index2]);
            index2++;
        }
    }
    return result.concat(arr1.slice(index1),arr2.slice(index2));
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容