关于前端面试题的案例分析

发布时间:2020-08-05 11:49:18 作者:小新
来源:亿速云 阅读:305

小编给大家分享一下关于前端面试题的案例分析,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

1、什么是闭包?

概念

闭包是一个过程,它记住了声明scope下的变量,在别的scope下,调用函数时 ,依然可以读取到这些变量。

原理分析

function outer(){
let n = 1;
function inner(){
  console.log(n);
}
return inner;
}
const fn = outer();
fn();

以上案例,提出来的问题是:outer执行结束之后,函数空间消亡了,inner的n为什么还有值?原理是什么?

在我的理解里,闭包可以想象成一个胶囊(persistent lexical scope data \ back pack),包裹住了变量n粘在函数inner上,一起返回给了fn,在memory中开辟一个存储空间放置这个胶囊。如果代码中有fn在执行,它会一直访问这个胶囊里的n值。什么时候不再有fn了,什么时候这个胶囊脱落掉消亡。

用途

两个用途:不污染global的变量池和变量值的暂存

2、 let和var的区别,let的产生背景?

区别

这两个关键词的最关键的区别是scope,var是认定的scope不包含for,if等这类函数块的,let把for,if等函数块认定为一个scope。

目的

有一些需要在函数块中记住变量属性的表达式,ES5需要加上花括号,这样子嵌套的层级会很多。ES6的时候就发明了let来简化代码。

3、 var的变量提升底层原理是什么?

本质上是由JS编译过程导致的。

代码的执行分为两个步骤

对声明进行编译——为var或function分配地址内存。

执行——进行正常的赋值。

例如var a = 2; 编译器先不会管a = 2这一赋值步骤。它最先要做的是把var a编译掉,而运算操作留在原地。声明在编译角度上被移动到了作用域的顶端。这就是提升的底层原理。

拓展话题——TDZ暂时死区

aVar的值符合提升的原则。aLet就有点意思了,它抛出来的错误实际上就是暂时死区错误。简单来说,从声明到到let的运算步骤为止的这段时空被锁死,外界在此期间寻求访问,不被允许。

4、 模块化思想

为什么要使用模块化?

模块化思想即最小暴露原则。隐藏掉别人不需要知道的代码细节,仅提供需要使用的API。保护代码的安全性和可维护性。

如何模块化?

书写一段模块的要点有二:1、要使用闭包原理。2、函数至少被调用执行过一次。

方法一:工厂模式

function module(){
   let text = "baz";
   let publicAPI = {
       baz: fuction (){
           console.log(text);
       }
   }
   
   return publicAPI;
}
var foo = module();
foo.bar();

方法二:单例模式(IIFE)

var foo = (function module(){
    let text = "baz";
    let publicAPI = {
        baz: function(){
     console.log(text);
    }
    return pubilcAPI;
 }
})();
foo.bar()

看完了这篇文章,相信你对关于前端面试题的案例分析有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. Storm面试题案例分析
  2. 前端面试题之url、href、src的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

前端面试题 web

上一篇:如何解决电脑光标一直往下跑的问题

下一篇:如何解决开机不显示主板logo的问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》