筆試題整理(八)

拼多多

一、

求以下代碼的輸出結果

 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));
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容