天天看點

前端知識點試題記錄

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' + 1在javascript中自動轉化為字元串拼接操作得到

'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.

繼續閱讀