天天看点

前端知识点试题记录

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.

继续阅读