加入收藏 | 设为首页 | 会员中心 | 我要投稿 新余站长网 (https://www.0790zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 交互 > 正文

JavaScript面试题

发布时间:2021-07-12 16:35:10 所属栏目:交互 来源:网络整理
导读:h1 id="js相关问题"JS相关问题 h3 id="数组去重"数组去重 function uniq(array){ var temp = []; //一个新的临时数组 for(var i = 0; i var aa = [1,2,4,9,6,7,5,3,5]; console.log(aa) console.log(uniq(aa)) h3 id="谈一谈javascript作用域链"1、谈一谈Jav

事件委托,就是某个事件本来该自己干的,但是自己不干,交给别人来干,就叫事件委托。打个比方:一个button对象,本来自己需要监控自身的点击事件,但是自己不来监控这个点击事件,让自己的父节点来监控自己的点击事件。

  • A,提高性能:例如,当有很多li同时需要注册时间的时候,如果使用传统方法来注册事件的话,需要给每一个li注册事件。然而如果使用委托事件的话,就只需要将事件委托给该一个元素即可。这样就能提高性能
  • B,新添加的元素还会有之前的事件

    • 闭包就是能够读取其他函数内部变量的函数
    • “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 通俗的讲:就是函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包。
    • ①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口;
    • ②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在
    • 系统中,闭包中的数据依然存在,从而实现对数据的持久使用。

    • ① 减少全局变量。
    • ② 减少传递函数的参数量
    • ③ 封装;

    • 使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等.

    • obj.appendChild()
    • obj.insertBefore()
    • obj.replaceChild()
    • obj.removeChild()

    // 创建新节点
    createDocumentFragment()    //创建一个DOM片段
    createElement()   //创建一个具体的元素
    createTextNode()   //创建一个文本节点
    // 添加、移除、替换、插入
    appendChild()
    removeChild()
    replaceChild()
    insertBefore() //在已有的子节点前插入一个新的子节点
    // 查找
    getElementsByTagName()    //通过标签名称
    getElementsByName()    //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
    getElementById()    //通过元素Id,唯一性

    • 前者会自动转换类型,后者不会

    • ==判断内容是否相等不比较类型

        console.log(1=="1");//true
    • ===判断内容相等且类型也相等

        console.log(1==="1"); //false

    function A(name){
        this.name = name;
        this.sayHello = function(){alert(this.name+” say Hello!”);};
    

    }
    function B(name,id){
    this.temp = A;
    this.temp(name); //相当于new A();
    delete this.temp;
    this.id = id;
    this.checkId = function(ID){alert(this.id==ID)};
    }


    <h3 id="如何阻止事件冒泡和默认事件">17、如何阻止事件冒泡和默认事件

    function stopBubble(e)
    {
        if (e && e.stopPropagation)
            e.stopPropagation()
        else
            window.event.cancelBubble=true
    }
    return false

    • 开关事件冒泡:
    • A,开启事件冒泡:element.addEventListener(eventName,handler,false);
    • B,关闭事件冒泡:假设传统方式事件的返回值为e,就可以通过e.stopPropagation()来关闭事件冒泡;

    • 开启事件捕获:element.addEventListener(eventName,hadler,true)

    function fn() {
        this.a = 0;
        this.b = function() {
            alert(this.a)
        }
    }
    fn.prototype = {
        b: function() {
            this.a = 20;
            alert(this.a);
        },c: function() {
            this.a = 30;
            alert(this.a);
        }
    }
    var myfn = new fn();
    myfn.b();
    myfn.c();

    • this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。
    • 但是有一个总原则,那就是this指的是调用函数的那个对象。
    • this一般情况下:是全局对象Global。作为方法调用,那么this就是指这个对象

    • this总是指向函数的直接调用者(而非间接调用者);
    • 如果有new关键字,this指向new出来的那个对象;
    • 在事件中,this指向触发这个事件的对象,特殊的是,IE中attachEcent中this总是指向全局对象Window;

    • this是一个关键字,它代表函数运行时,自动生成一个内部对象,只能在函数内部使用
    • 1.作为纯粹的函数调用this指向全局对象
    • 2.作为对象的方法调用this指向调用对象
    • 3.作为构造函数被调用this指向新的对象(new会改变this的指向)
    • 4.apply调用this指向apply方法的第一个参数
    • this总是指向函数的直接调用者(而并非间接调用者);
    • 如果有new关键字,this指向new出来的那个对象;
    • 在事件中,this指向这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window;

    function fun(n,o) {
      console.log(o)
      return {
        fun:function(m){
          return fun(m,n);
        }
      };
    }
    var a = fun(0);  a.fun(1);  a.fun(2);  a.fun(3);
    var b = fun(0).fun(1).fun(2).fun(3);
    var c = fun(0).fun(1);  c.fun(2);  c.fun(3);
    

    //答案:

    (编辑:新余站长网)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读