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.