前端系列-Javascript方面

本文详细探讨了JavaScript中的核心概念,包括闭包的定义、特性和应用场景,变量和函数声明的提升机制,以及this对象的理解。此外,还讨论了事件模型、内存管理、数组去重方法、类的定义方式以及继承的实现。文章还涵盖了JavaScript的基本规范、函数式编程思想、作用域链和事件代理,并解析了AJAX的工作原理及跨域解决方案。最后,介绍了同步与异步的区别以及严格模式的限制,展示了JavaScript在前端开发中的重要性。
摘要由CSDN通过智能技术生成

1、什么是闭包以及特性、好处、坏处、使用场景?

      闭包就是能够读取其他函数内部变量的函数。

      特性:1、函数内部可以嵌套函数

                 2、内部函数可以直接访问外部函数的参数和变量

                 3、参数和变量不会被垃圾回收机制回收

      使用场景:数据封装和私有化、模块模式、函数防抖、函数节流

      使用闭包就是为了设置私有变量和方法,

      好处:能够实现封装和缓存

      坏处:就是内存消耗,使用不当可能会造成内存溢出。      

function Add(i=0){
   return function(){
      return ++i;
  }
}
var v=Add();
console.log(v());  //1
console.log(v());  //2

2、谈谈js中变量和函数声明的提升?

      变量和函数声明的提升会被提升到最顶部去执行

      函数的提升高于变量的提升

      如果在函数内部用var声明了与外部相同的变量,则不向下寻找

      匿名函数不会被提升

      不同块中互不影响

3、说说this对象的理解?

      this总是指向直接调用者;

      如果有new关键字,则指向new出来的那个对象;

      在事件中,this指向触发这个事件的对象,特殊的是:在IE中的attachEvent中的this总是指向全局对象window。

4、事件模型的理解?

      冒泡型事件:当使用冒泡型事件时,子级元素先触发,父级元素后触发。

      捕获型事件:当使用捕获型事件时,父级元素先触发,子级元素后触发。

5、说说栈和堆的区别?

     栈内存:存储的都是局部变量,后进先出,栈内存的更新速度很快,因为局部变量的声明周期都很短;

     堆内存:存储的都是数组和对象,堆里面的实体不会被释放,但是会被当成垃圾,java有垃圾回收机制不定时地收取;

6、map和forEach的区别?

      forEach是最基本的循环,默认有三个参数:array、item、index

      map的用法和forEach基本一致,不同的是它会返回一个数组,所以callback需要有return值,如果没有,会返回undefined;

7、JS数组去重?

      new Set()、indexOf、利用includes、sort(不推荐)

 const array = [1, 2, 2, 3, 4, 4, 5];

 const uniqueArray1 = [...new Set(array)];

 const uniqueArray2 = array.filter((value, index, self) => self.indexOf(value) === index);

 const uniqueArray = array.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { accumulator.push(currentValue); } return accumulator; }, []);

 const uniqueObj = {};
 const uniqueArray = array.filter((item) => uniqueObj.hasOwnProperty(item) ? false :       uniqueObj[item] = true);

8、js定义类的四种方法?

      工厂方法、构造函数方法、原型方法、组合使用构造函数和原型方法。

9、js实现继承的三种方式?

      原型链继承:原型链是JS对象模型的基础,每个对象都有一个原型,对象可以从原型继承属性和方法。

      构造函数继承:通过调用父类构造函数来实现继承,同时覆盖子类的构造函数。

      组合继承:先通过构造函数继承属性,再通过原型链继承方法。

      原型式继承:直接使用父类的原型作为子类的原型。

10、对原生js的了解程度?

        数据类信、运算、对象、Function、继承、闭包、作用域、原型链、Ajax、Dom、Bom、内存泄露、跨域、异步装载、模版引擎、前端MVC、路由、模块化、Canvas、ECMAScript

11、谈一谈你对“函数式编程”的理解?

        简单来说,函数式编程是一种编程规范,也就是如何编写程序的方法论;

12、说说你对作用域的理解?

        作用域的作用:是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的,

13、说说什么是事件代理?

        事件代理又称之为事件委托,就是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务;

14、说说ajax的原理?

        ajax的原理简单来说就是在用户和服务器之间加了一个中间层(ajax引擎),由XmlHttpRequest对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值