前端学习——记录大厂前端笔试题

1.

<!DOCTYPE html>
<html lang="en">
<head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
</head>
<body> 
      <!-- 逗号操作符 -->
      <script>
      var a=(1-1,1+1);//计算前后的值,将后面的计算结果返回回去
      </script>

      <!--一道笔试题 
            写出下面程序的执行结果
      -->
      <script>
        var f=(
            function f(){
                  return "1";
            },
            function g(){
                  return 2;
            }
            )();
            typeof f;//就是typeof(f),可以用空格代替括号,最好用空格
            //输出number  
      </script>

      <script>
      var x=1;
      if(function f(){}){
            x += typeof f;//未经声明的变量只有在typeof下不报错 返回Undefined字符串
      }
      console.log(x);//1undenfined
      </script>
      
</body>
</html>

2.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        //阿里巴巴笔试题
        function foo(x){
            console.log(arguments)
            return x;
        }
        foo(1,2,3,4,5)
        //输出[1,2,3,4,5]

        function foo(x){
              console.log(arguments);
              return x;
        }(1,2,3,4,5)

       //立即执行函数
        (function foo(x){
            console.log(arguments)
            return x;
        })(1,2,3,4,5)
        //输出1,2,3,4,5

        
    </script>
</body>
</html>

3.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
       //逗号操作符的用法
       //返回逗号后面的值
        
    </script>
</body>
</html>

在控制台上运行

再看以下代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
       //逗号操作符的用法
       //返回逗号后面的值
       //要加括号()
       var f=(
           function f(){
               return "1";
           },
            function g(){
                return 2;
            }//逗号操作符,相当于var f=(function g(){return 2;})返回2
       )();//立即执行函数
       typeof f;//number
        
    </script>
</body>
</html>

4.

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    //例一
    //prototype是构造函数的公有祖先  祖先上的东西构造函数对象都可以用
    Person.prototype.lastName = 'deng';

    function Person() {
      // var this={
      //   _proto_:Person.prototype
      // }

    }
    var person = new Person();
    console.log(person.lastName); //先看看自己的function Person()里面有没有lastname的值,没有就在prototype里面找


    //例2
    //一旦经历了var的操作,所得出的属性,window,这种属性叫做不可配置的属性
    //不可配置的属性,delete不掉

    //可配置的是这下面这个例子的
    var num = 123;
    var obj = {

    }
    obj.num = 234;
    //delete obj.num   true
    //如果在控制台 var num=123,再delete 则是false


    //例3
    //1:预编译 this--->window
    //  2:谁调用的this指向谁
    //  3: call apply
    //  4:全局this--->window

    function test() {
      var num = 123;

    }
    test(); //相当于test.call()  如果test.call({name:"123"});则this变成{name:"123"}
    // test()-->AO{
    //   arguments:{}//类数组,形参列表
    //   this:window
    //   num:undefined
    //   a:function(){}
    // }

    var name = 'window';
    var obj = {
      name: "222",
      say: function () {
        console.log(this.name); //obj
      }
    }
    //1
    obj.say(); //obj调用的this  this指向obj
    //2
    obj.say.call(window); //有call  this就指向call括号里的值
    //3
    var fun = obj.say //相当于function (){}直接将函数拿出来了,全局中走预编译的环节, window
    //4
    fun.call(obj); //obj

    //call 和apply的应用
    function Person(name, age) {
      this.name = name;
      this.age = age;
    }

    function Student(name, age, sex) {

      Person.call(this, name, age) // this.name=name;
      // this.age=age;
      this.sex = sex;
    }
    var student = new Student('shi', 20, 'male');

    //例4
    //闭包就是一个函数嵌套另一个函数,把被嵌套的函数保存到嵌套函数的外面
    var obj = {}; //这样b能拿到a的执行期上下文
    function a() {
      function b() {

      }
      obj.fun = b;
    }

    //例五
    // “类”就是一部机器,而“对”象就是由机器生产出来的产品。new的命令就是让机器生产出一个产品来,然后程序员再去使用这个产品。
    //什么时候用new 
    function Person() {
      //var this={}
      this.name = 'abc';
      this.age = 123;
      //return this
    }
    //  构造函数和类是一个东西 想通过构造函数构造对象的时候用new,不new生产不出来对象,执行函数的时候不用new
    var person = new Person(); //new加上构造函数的执行才能够构造对象出来,有了new之后构造函数发生两步隐式变化,请看构造函数内部注释部分

    function Person(name){
      // var this={
      //   makeMoney:function(){}
      //   offer:function (){}
      // }
      var money=100;
      this.name=name;
      this.makeMoney=function(){
        money++;
      }
      this.offer=function(){
        money--;
      }
      //return this
    }
    var person=new Person();
    
    
  </script>
</body>

</html>

5.关于dom操作的笔试题

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <!-- 一道阿里笔试题 
    只有insertBefore方法,如何实现insertAfter方法
    -->
    <div>
        <i></i>
        <b></b>
        <span></span>
    </div>

   <script>
       //假设要在b标签后加一个p标签,targetNode是指p标签,afterNode是指b标签
       Element.prototype.insertAfter=function (targetNode,afterNode){
               var beforeNode=afterNode.nextSibling;
               if(beforeNode==null){//如果在最后的一个标签的后面加标签就可以直接appendChild
                   this.appendChild(targetNode);//谁调用this就是谁,在控制台用父节点div调用
               }else{
                   this.insertBefore(targetNode,beforeNode);
               }
       }
       var div=document.getElementsByTagName('div')[0];
       var i=document.getElementsByTagName('i')[0];
       var b=document.getElementsByTagName('b')[0];
       var span=document.getElementsByTagName('span')[0];
       var p=document.createElement('p');
   </script>
    
</body>
</html>

6.请用html和css画出一个三角形

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div></div>
</body>
<style>
    div{
        width: 0;
        height: 0;
        border-bottom: 100px solid cyan;
        border-left: 50px solid transparent;
        border-right: 50px solid transparent;
    }
</style>
</html>

7. 经过这一系列的运算,x,y,z分别是什么值

 <script>
    
    var x=1,y=z=0;
    function add(n){
      return n=n+1
    }
    y=add(x)
    //两个同名函数,后面的函数会覆盖前面的函数
    function add(n){
      return n=n+3
    }
    z=add(x)
  </script>

 8.

 <script>
     
    var bar={a:"002"};//{a:'a'}
    function print(){
      bar.a='a',
      Object.prototype.b='b';
      return function inner(){
        console.log(bar.a);
        console.log(bar.b);//在原型链上找
      }
    }
    print()()//第一个括号返回的是一个函数,第二个括号执行
  </script>

9.

<script>
    
    var h=function a(){
      return 23
    }//这是表达式,a找不到名了
    console.log(typeof a());// a is not defined
   
  </script>

10.

11.

12.

13.

14.

15.三栏布局

 16.position:absolute  50% 50%

17.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值