小编给大家分享一下关于前端面试题的案例分析,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!
1,什么是闭包吗?
概念
闭包是一个过程,它记住了声明范围下的变量,在别的范围下,调用函数时,依然可以读取到这些变量。
原理分析
function 外(){ let n =, 1; function 内部(){ console.log才能(n); } return 内; } const fn =,外(); fn ();
以上案例,提出来的问题是:外执行结束之后,函数空间消亡了,内心的n为什么还有值?原理是什么?
在我的理解里,闭包可以想象成一个胶囊(持久词法作用域数据\背包),包裹住了变量n粘在函数内上,一起返回给了fn,在记忆中开辟一个存储空间放置这个胶囊。如果代码中有fn在执行,它会一直访问这个胶囊里的n值。什么时候不再有fn了,什么时候这个胶囊脱落掉消亡。
用途
两个用途:不污染全球的变量池和变量值的暂存
2,让和var的区别,让的产生背景吗?
区别
这两个关键词的最关键的区别是范围、var是认定的范围不包含,如果等这类函数块的,我们把,如果等函数块认定为一个范围。
目的
有一些需要在函数块中记住变量属性的表达式,ES5需要加上花括号,这样子嵌套的层级会很多.ES6的时候就发明了让来简化代码。
3, var的变量提升底层原理是什么?
本质上是由JS编译过程导致的。
代码的执行分为两个步骤
对声明进行编译为var或函数分配地址内存。
执行——进行正常的赋值。
例如var=2;编译器先不会管一个=2这一赋值步骤。它最先要做的是把var一编译掉,而运算操作留在原地。声明在编译角度上被移动到了作用域的顶端。这就是提升的底层原理。
拓展话题——TDZ暂时死区
阿瓦尔人的值符合提升的原则.aLet就有点意思了,它抛出来的错误实际上就是暂时死区错误。简单来说,从声明到到我们的运算步骤为止的这段时空被锁死,外界在此期间寻求访问,不被允许。
4模块化思想
为什么要使用模块化?
模块化思想即最小暴露原则。隐藏掉别人不需要知道的代码细节,仅提供需要使用的API。保护代码的安全性和可维护性。
如何模块化?
书写一段模块的要点有二:1,要使用闭包原理。2,函数至少被调用执行过一次。
方法一:工厂模式
function 模块(){ ,,let text =,“baz"; ,,let publicAPI =, { ,,,,,,记者:,fuction () { ,,,,,,,,,,console.log(文本); ,,,,,,} ,,} ,, ,,return publicAPI; } var foo =,模块(); foo.bar ();
方法二:单例模式(IIFE)
var foo =, (function 模块(){ ,,,let text =,“baz"; ,,,let publicAPI =, { ,,,,,,,记者:,函数(){ ,,,,console.log(文本); ,,,} ,,,return pubilcAPI; ,} })(); foo.bar ()
看完了这篇文章,相信你对关于前端面试题的案例分析有了一定的了解,想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!