zoukankan      html  css  js  c++  java
  • 前端面试题准备 3

    一、apply和call

    主要是用来更改上下文,即this的指向

    var func=new function(){this.a="func"}
    var myfunc=function(x){
        var a="myfunc";
        console.log("this.a:"+this.a);
        console.log("a:"+a);
        console.log("x:"+x);
    }
    myfunc.call(func,"var");

    this.a:  func
    a:  myfunc
    x:  var

    可见更改的是this

    有一个说法非常好:平时是对象调函数,apply/call是函数调对象

    如果在javascript语言里没有通过new(包括对象字面量定义)、call和apply改变函数的this指针,函数的this指针都是指向window

    • apply 、 call 、bind 三者都是用来改变函数的this对象的指向的;
    • apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文;
    • apply 、 call 、bind 三者都可以利用后续参数传参;
    • bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。

    二、一道面试题

    function log(){
      console.log.apply(console, arguments);
    };
    log(1);    //1
    log(1,2);    //1 2
    function log(){
      var args = Array.prototype.slice.call(arguments);
      args.unshift('(app)');
      
      console.log.apply(console, args);
    };

    代理console.log,以及在消息前面加上字符(如本例的app),看到出现几次了,顺便记下来

    三、caller和callee

    caller返回一个函数的引用,这个函数调用了当前的函数;

    1 这个属性只有当函数在执行时才有用
    2 如果在javascript程序中,函数是由顶层调用的,则返回null

    callee返回正在执行的函数本身的引用,它是arguments的一个属性

    1 这个属性只有在函数执行时才有效
    2 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length是否等于arguments.callee.length
    3 它可以用来递归匿名函数

    var fn=function(n){ 
    if(n>0) return n+fn(n-1); 
    return 0; 
    } 
    alert(fn(10)) 

    使用callee让代码更加简练,也防止了全局变量的污染

    var fn=(function(n){ 
    if(n>0) return n+arguments.callee(n-1); 
    return 0; 
    }); 
    alert(fn(10)) 

    四、正则去html标签

    var reg = /</?w+/?>/gi;
    var str = "<div>这里是div<p>里面的段落</p></div>";
    console.log(str.replace(reg,”"));

    这道题还是比较经典的

    /?表示0个或1个/,如果是结束标签,就有/,如果是开始的,就没有。如</div>中的</

    w+是标签名,如</div>中的div

    /?同理,在结束时,有些自结束标签,如<img/>,最后就有/,普通开始标签没有/,如<div>

    其它待续,在公司陪合作伙伴加班。

  • 相关阅读:
    [日常工作]WorkStation 使用端口转发的方式使用宿主机IP地址提供服务
    [日常工作]虚拟机或者实体机转换成HyperV虚拟机的方法
    [linux学习]sysctl 以及 net.ipv4.ip_forward
    [自学]Docker system 命令 查看docker镜像磁盘占用情况 Docker volume 相关
    Docker 修改默认存储路径的一个方法
    [学习笔记]Ubuntu下安装配置SQLSERVER2017
    VSCODE安装以及使用Python运行调试代码的简单记录
    Win2012r2 以及win2016 安装.NET3.5
    Win2016以及win10 IIS10 下安装IEwebcontrol的方法
    [日常工作]协助同事从不能开机的机器上面获取资料信息
  • 原文地址:https://www.cnblogs.com/liuyouying/p/5027292.html
Copyright © 2011-2022 走看看