阿里巴巴面试题

 

1、(单项选择)对于下列程序运行结果,符合预期的是

function f1() {

    console.time('time span');

}

function f2() {

    console.timeEnd('time span');

}

setTimeout(f1, 100);

setTimeout(f2, 200);

function waitForMs(n) {

   var now = Date.now();

    while (Date.now() - now < n) {

    }

}

waitForMs(500);

A、time apan:700.077ms      B、time apan:0.066ms

C、time apan:500.077ms      D、time apan:100.077ms

 选择B,因为要f1要过100毫秒执行,f2要200毫秒执行,waitForMs是过500毫秒执行,因为JS是单线程,所以f1和f2执行几乎同时,所以开始时间和结束时间几乎接近,所以他们之间间距时间肯定很小,所以选择B,

 对应题目

console.time('计时器');

for (var i = 0; i < 1000; i++) {

      for (var j = 0; j < 1000; j++) {}

}

console.timeEnd('计时器');

答案:计时器: 2.371ms

 

2、(单项选择)请选择结果为真的表达式:B

A、null instanceof Object       B、null == undefined

C、NaN == NaN                   D、false == undefined

 

3、(单项选择)下面程序的执行结果是:A

var name = 'World!';

(function () {

  if (typeof name === ‘undefined’) {

   var name = ‘Jack’;

   console.log(‘Goodbye ‘ + name);

  } else {

   console.log(‘Hello ‘ + name);

  }

})();

A、Goodbye Jack         B、Hello Jack

C、Hello undefined      D、Hello World

备注:如果 name = "Jack" 前面加var ,那就是name转成undefined,所以他们绝对等于
所以走第一个,如果不加申明,那'World!'=== "undefined"是false
所以走第二个

 

4、(不定项选择)以下关于DOM事件流的表述哪些是正确的 B,D

A、事件流包括两个阶段:事件捕获阶段、事件冒泡阶段。错误,中间再加目标阶段

B、IE跟标准浏览器对于DOM事件流实现不一样

C、假设parentEle是childEle的父节点,绑定事件:

parentEle.addEventListener(“click”, fn1, false)和

childEle.addEventListener(“click”, fn2, false),当点击childEle的时候fn1将先于fn2触发。

D、addEventListener第三个参数true代表支持捕获,false代表不支持捕获 备注:false是捕获

 

5、(不定项选择)通过下面的哪些方法可以获取页面的html元素 A,C,D

A、document.getElementById

B、document.getElementsByClassName

C、document.querySelector

D、document.querySelectorAll

 

6、(不定项选择)下面选项中,对javascript事件的描述不正确的是:C

A、IE使用attachEvent/detachEvent方法来添加和删除事件监听器;w3c使用addEventListener/removeEventListener方法。

B、IE是将event对象作为参数传递给监听器,w3c事件监听器内使用的是一个全局的Event对象。

C、IE提供了对事件捕获阶段的支持。错误,备注IE9以上支持

D、要停止事件的传递,IE的做法是设置event对象的cancelBubble为true,而w3c的做法是设置执行stopPropagation方法。

 

7、(单项选择)

var array1 = [1,2];

var array2 = array1;如果改成 var array2 = [1,2]

array1[0] = array2[1];

array2.push(3);

console.log(array1);

console.log(array2);

执行上面的代码array1和array2的值分别是什么?C

A、Array1的值为[2,2];Array2的值为[1,2,3]

B、Array1的值为[2,2,3];Array2的值为[1,2,3]

C、Array1的值为[2,2,3];Array2的值为[2,2,3]

D、Array1的值为[1,2,3];Array2的值为[1,2,3]

备注:如果改成var array2 = [1,2],那么是A

 

8、(不定项选择)有如下代码:

function Test(name,age){

    this.name = name;

    this.age = age;

};

Test.prototype = {

    name:’aliyun’,

    hasOwnproperty:function(){

    return false;

}

};

var instance = new Test(‘alibaba’,102);

以下关于原型链的说法正确的是: A ,C

A、JavaScript对象有两种不同的属性,一种是对象自身的属性,另一种是继承于原型链上的属性

B、instance.name == ‘aliyun’为true

C、instance.hasOwnproperty(‘age’)结果将是false

D、所有对象都继承自Object.prototype 备注:Object.prototype为null

 

9、实现函数range([start,]stop[,step])返回一个数组(step大于1)D

A range(1,11); => [1,2,3,4,5,6,7,8,9,10]

B range(0); => []

C range(10); => [0,1,2,3,4,5,6,7,8,9]

D range(0,30,5); => [0,5,10,15,20,25]

 

10、有一个包含数据列表的页面,数据行数不确定。每一行数据都有一个删除按钮,单击删除按钮删除该列数据,请用JavaScript实现该功能。

<script>

      var oUl = document.createElement('ul');
          oUl.id="oul";
      var str="";
      for(var i=0;i<10;i++){
              str+="<li>cjakcsk<span class=\"shanchu\">删除"+i+"</span></li>";
              var spanli=document.getElementsByTagName("span");
      };
       oUl.innerHTML=str;
       document.body.appendChild(oUl);
       var liSpanObj=oUl.querySelectorAll("span");
       for(var i=0;i<liSpanObj.length;i++){
             //第一方法
             liSpanObj[i].index = i;
             liSpanObj[i].onclick=function(){
                 oUl.removeChild(liSpanObj[this.index].parentNode);
             }
             //第一个方法

             (function(k){
                 liSpanObj[i].onclick=function(){
                      var li=liSpanObj[k].parentNode;
                          oUl.removeChild(li);
              })(i);

        }

</script>

 

posted @ 2016-03-24 16:21  归尘2016  阅读(577)  评论(0编辑  收藏  举报