前端知識點試題記錄

1.以下爲一段瀏覽器中可運行的Javascript 代碼,則運行該段Javascript代碼的頁面彈出框中顯示的結果是:()

var obj = {"key":"1","value":"2"};

var newObj = obj;

newObj.value += obj.key;

alert(obj.value);

答:21

解析:obj是JS對象,對象由鍵和值組成,操作以地址進行。

var newObj = obj相當於兩個對象指向同一個地址,修改其中任何一個,另外一個也會受到影響。

newObj.value = 2;

obj.key = '1'; newObj.value += obj.key; 相當於 newObj.value = newObj.value + obj.key;  所以'2' + 1javascript中自動轉化爲字符串拼接操作得到

'21'


2.下面有關JavaScript中 call和apply的描述,錯誤的是?

A.call與aplly都屬於Function.prototype的一個方法,所以每個function實例都有call、apply屬性

B.兩者傳遞的參數不同,call函數第一個參數都是要傳入給當前對象的對象,apply不是

C.apply傳入的是一個參數數組,也就是將多個參數組合成爲一個數組傳入

D.call傳入的則是直接的參數列表。call 方法可將一個函數的對象上下文從初始的上下文改變爲由 thisObj 指定的新對象。

答:B

解析:call()方法和apply()方法的作用相同,他們的區別在於接收參數的方式不同。對於call(),第一個參數是this值沒有變化,變化的是其餘參數都直接傳遞給函數。(在使用call()方法時,傳遞給函數的參數必須逐個列舉出來。使用apply()時,傳遞給函數的是參數數組)如下代碼做出解釋:

 

function add(c, d){ 
return this.a + this.b + c + d; 

var o = {a:1, b:3}; 
add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16 
add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34 


3.下面有關html結構描述正確的有?

A.<ul> <li> </li> </ul>

B.<ol> <li> </li> </ol>

C.<dl><dt><dd></dd></dt></dl>

D.<table> <tr> <td></td> </tr> </table>

答:ABD

解析:<li> 標籤定義列表項目。
<li> 標籤可用在有序列表 (<ol>) 和無序列表 (<ul>) 中。
<dl>標記定義了一個定義列表,定義列表中的條目是通過使用<dt>標記(“definition title”,定義標題)和<dd>標記(“definition description”,定義描述)創建的。<dt>給出了術語名,<dd>標記給出了術語的定義。
<table>代表表格</table> 
<tr>代表表格中的一行</tr> 
<td>代表表格中的一列</td>


4.語句var arr=[a,b,c,d];執行後,數組arr中每項都是一個整數,下面得到其中最大整數語句正確的是哪幾項?

A.Math.max(arr)

B.Math.max(arr[0], arr[1], arr[2], arr[3])

C.Math.max.call(Math, arr[0], arr[1], arr[2], arr[3])

D.Math.max.apply(Math,arr)

答:BCD

解析:數Math.max()傳入的參數必須是整數,小數,或0,其他類型就會返回NaN,js中call和apply方法可以用來代替另一個對象調用一個方法,將一個函數的對象上下文從初始的上下文改變爲有thisObj指定的新對象

apply和call的作用一樣,只是傳入的參數不同

apply傳入的是一個參數數組,也就是將多個參數組合成爲一個數組傳入,而call則作爲call的參數傳入(從第二個參數開始)。 
如 func.call(func1,var1,var2,var3)對應的apply寫法爲:func.apply(func1,[var1,var2,var3]) 

同時使用apply的好處是可以直接將當前函數的arguments對象作爲apply的第二個參數傳入

5.寫出如下代碼彈出的結果

<script> 

    var m= 1, j = k = 0; 

    function add(n) { 

        return n = n+1; 

  } 

    y = add(m); 

    function add(n) { 

        return n = n + 3; 

    } 

z = add(m); 

</script> 

y和z的最終結果爲:

A. 2 4

B. 4 4

C, 2 2

D 報錯

答:B

解析:js裏面沒有函數重載的概念,在其他語言中(如java)java中,可以存在同名函數,只要傳入的參數數量或者類型不同即可。在js中,定義了兩個同名函數後,後面的函數會覆蓋前面定義的函數。結合這道題來說,由於函數聲明提升,所以函數聲明會提前,由於存在同名函數,後面的add函數將覆蓋第一個add函數,所以兩次調用add()返回的值是相同的。也就是y,z都爲4.

發佈了20 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章