zoukankan      html  css  js  c++  java
  • js笔试题一套(未完待续)

    1.下面程序的运行结果是:

    function test(x, y, z) {  
      alert(test.length);
      alert(arguments.length);
      alert(arguments.callee === test);
      alert(arguments[2]);
    }
    test(10, 20);
    

    A.2,3,true,0  B.3,3,false,20  C.3,2,true,undefined  D.2,3,false,10 

    分析:test.length是返回的函数的形参个数,所以为3;

        arguments.length返回的是函数调用时的实参个数,所以为2;

       arguments.callee:初始值就是正被执行的 Function 对象,用于在函数内部调用自身,特别是函数本身为匿名函数时,要在内部调用自己,那么它就闪亮登场了

       arguments对象本身是个由函数调用时传入的实参组成的伪数组,访问单个参数的方式与访问数组元素的方式相同。索引 n 实际上是 arguments 对象的 0…n 属性的其中一个参数。由于调用test时,没有传入第三个参数,所以返回undefined

    扩展:谈到arguments,在说说它的另一个应用,刚才谈到arguments.length返回的是函数调用时的实参个数,那么通过判断这个实参个数,我们就可以优雅的模拟实现js的”重载“了

    function doAdd() {

      if(arguments.length == 1) {
        alert(arguments[0] + 5);
      } else if(arguments.length == 2) {
        alert(arguments[0] + arguments[1]);
      }
    }
    
    doAdd(10);	//输出 "15"
    doAdd(40, 20);	//输出 "60"
    

    当只有一个参数时,doAdd() 函数给参数加 5。如果有两个参数,则会把两个参数相加,返回它们的和。所以,doAdd(10) 输出的是 "15",而 doAdd(40, 20) 输出的是 "60"。

    虽然不如重载那么好,不过已足以避开 ECMAScript 的这种限制。

    2. 下面程序的运行结果是:

    var x = 30;
    function test(){
        alert(x);
        var x = 10;
        alert(x);
        x = 20;
        function x() {};
        alert(x);
    }
    test();
    

    A.30,10,function x(){}  B.undefined,10,20 

    C. function x(){},10,20  D. 30,10,20 
    分析:  进入test函数,第一个alert(x)返回的是function x(){},为什么了?这个就要从js的预解析谈起了,进入函数的作用越后,js会首先读取变量和函数的声明,当变量和函数重名时(不管谁先谁后),函数名优先(具体的原因,我将稍后单独写一篇随笔)所以    这个地方x指向了function x(){}。为什么不是外面的x=30了?因为在test函数的作用域里,能够找到x的声明,所以相当于内部x将外部的x给屏蔽了!

        执行第二个alert(x)时,前面一行已经给x赋值为10,所以为10;

               执行第三个alert(x)时,变量x已经被赋值为20了,那么function x(){}对x有什么影响了?没有任何影响,因为它就仅仅是个函数声明。所以为20



    3. 下面程序的运行结果是:

     function test() {
        var x = 10;
        var y = 20;
        return function () {
            alert([x, y]);
        };
    }
    var x = 30;
    var y = 40;
    var temp = test();
    temp(); 
    

    A.30,40  B.10,40  C.10,20  D.30,20 

     分析: 显示,通过temp此时已经是一个函数了,它相当于   temp = function(){ alert([x,y])}。此时关键是看x,y的值了,到底是指向test函数里里面的值了还是外面。

    此处又涉及到了 闭包,即test内部的x,y没有释放,原因就是alert([x,y])引用了它,所以答案是 C

    4. 1), 2) ,3)的运行结果分别是:

    1) false == 0
    
    2) "5" + 3
    
    3)"5" + {
        toString: function(){return this;},
        valueOf: function(){return "valueOf";}
     }
    

    A.true,"8","5this"         B.false,8,"5valueOf"

    C.true,"53","5valueOf"     D.fasle,"53","5[object Objetc]" 
    分析:1中为true,因为==会执行一个类型自动转化,Number(false)的值为0,Boolean(0)的值为false;

             2,“+”此时是做为链接符号存在的。ECMAScript262中规定,首先对"+"前后的两个表达式进行求值,即调用valueof方法。再调用typeof对他们的类型进行判断,如果有一个类型为string的则都将转化为string。所以后面的3会被转化为string类型。如果此处为“-”,则答案为2,会将前面的“5”转化为number类型
             3,在2中已经说到,“+”后面的对象,首先会调用valueOf(),所以后面的对象的求值结果为“valueOf”,也是字符串。最后直接连接在一起。

    5. 1), 2)的运行结果是:

    1)
    
    var test = {x: 10};
    
    var temp = {
      x: 20,
      do: function (){ alert(this.x);}
    };
    
    temp.do();
    
    test.do = temp.do;
    
    test.do();
    
    2)
    
    var test = {
      x: 10,
      do: function (){ alert(this.x);}
    };
    
    var temp = test.do;
    
    temp();
    

    A.20,20,10  B.10,20,undefined  C.20,10.undefined  D.20,10,10

     

    6. 下面程序的运行结果是:

    function A(){}
    
    A.prototype.x = 10;
    
    var a1 = new A();
    
    A.prototype = { x:20, y:30 };
    
    var a2 = new A();
    
    alert(a1.x)
    
    alert(a1.y)
    
    alert(a2.x)
    
    alert(a2.y)
    

    A.20,30,20,30  B.10,undefined,10,undefined  C.10,undefined,20,30  D.10,30,20,30

    7.如何阻止事件起泡?如何阻止事件默认行为? 

    8.列举几个常用的事件对象属性 

    9.举几个常用dom元素的属性和方法 

    10.块级元素有哪些?内联元素有哪些?块级元素与内联元素区别  

    11.ie各版本css hack

    12 . jQuery中$函数有几种用法

    13. 如何从jQuery对象中得到匹配到的dom对象

    14. jQueryevent.stopImmediatePropagation()方法作用 

    15. 检测一个变量是否是string类型  

    16. 请写出一个正则表达式,验证以下数列:

    有一个字符串:1,2,3,4,5,6,7,8,9,10,11,12 , 规律是一个数字后面跟一个逗号,最后一个数字后面没有逗号,并且数字只能是1到12中的任意一个 

     17.实现一个insertAfter方法

  • 相关阅读:
    python数据类型:字典Dictionary
    python数据类型:元组
    python数据类型:列表List和Set
    python数据类型:字符串
    python数据类型:Number数字
    Python控制语句
    Python运算符
    python基础语法
    Linux shell Script初识
    linux awk详解
  • 原文地址:https://www.cnblogs.com/wenber/p/3626254.html
Copyright © 2011-2022 走看看