欢迎来真孝善网,为您提供真孝善正能量书籍故事!

深入探讨JavaScript核心面试题:闭包与变量作用域解析

时间:11-16 神话故事 提交错误

for (var i=1; i=5; i++) {

设置超时(函数(){

控制台.log(i);

}, 1000);

}

那么经过你的分析,你认为这段代码会输出什么呢?

有的同学很果断,一眼就写出了答案:1、2、3、4、5

有的同学比较谨慎,分析后得出结论:5、5、5、5、5

有同学坚持实用主义,立即打开vscode再次运行代码,得到6,6,6,6,6

但我们现在面临的是面试问题。肯定不会有电脑给你运行代码,所以我们需要了解其机制和原理。

对不起拿到12345的同学,你还没有入门js,还需要继续努力。

结论是,55555名同学已经掌握了同步和异步机制,对变量作用域也有了很好的理解,但不够细心。

那为什么是66666呢?首先,变量i在这段代码中是一个“变量”,因为函数内部只有参数是常量。 For循环瞬间完成了循环,循环中变量i的值也在不断变化,五个定时器必须同时执行。此时i的值已经是6了,为什么是6呢?因为i++最后会再次执行,而i的起始值为1,犯错的同学明白了吗?

好吧,我们来看看什么是闭包。

首先问一个问题,我们如何修改上面的代码,使输出结果变成12345?

如果你是一个熟悉闭包的学生,将会给出以下结果。

for (var i=1; i=5; i++) {

(函数(j){

设置超时(函数(){

控制台.log(j);

}, 1000);

})(我);

}

首先,这里给新手同学延伸一个概念。 JavaScript 中“()”的用法。

()可以定义操作的优先级,这个大家都知道。那么()还有另一种用法,就是执行。所以当有两个()时,如果前面的()满足表达式规则,那么第一个()会作为函数执行,那么第二个())就是这个函数的参数。

正如前面提到的,只有函数的参数才是函数内部的常量。那么j是一个常数。这个常量就是循环调用这个函数时传入的i。循环执行了5次,i被传入了5次。定时器打印j的值,即每次传入的i的值。这称为闭包。

如果你还没有理解()的概念,也没有真正理解上面的代码,那么我们可以让代码更直观一些。

函数outnum (i) {

设置超时(函数(){

控制台.log(i);

}, 1000);

}

for (var i=1; i=5; i++) {

输出数(i);

}

这不是更好理解吗?

说到这里,我们再延伸一下另一个知识点,定时器。

for (var i=1; i=5; i++) {

设置超时(函数(){

控制台.log(i);

}, 1000);

}

控制台.log(i);

这段代码的输出结果是666666

在上面的代码中,我们假设当两个输出之间有第二个间隔时,它们之间用- 分隔。如果两个输出之间的间隔可以忽略,则它们之间用-分隔。你认为上面代码的输出会是什么?

正确答案是:6-6、6、6、6、6 为什么?这就需要非常熟悉JS中的定时器工作机制。在循环执行期间,几乎同时设置了5个定时器。正常情况下,这些定时器会在1秒后被触发,并立即执行循环后的输出

好了,文章到这里就结束啦,如果本次分享的深入探讨JavaScript核心面试题:闭包与变量作用域解析和问题对您有所帮助,还望关注下本站哦!

用户评论

泡泡龙

最近准备面试,感觉这些东西都挺重要的!

    有16位网友表示赞同!

念安я

闭包一直让我有点绕,希望这篇文章能解释清楚!

    有18位网友表示赞同!

炙年

变量的作用域也是个很重要的话题,以前没太明白,好好学习一下吧。

    有13位网友表示赞同!

坏小子不坏

面试真难啊,希望能通过这篇博客掌握这些知识点。

    有11位网友表示赞同!

爱你的小笨蛋

准备写代码还要注意作用域?感觉又加了难度!

    有18位网友表示赞同!

伤离别

我有些理解闭包的概念,但变量的作用域还是懵逼中...

    有12位网友表示赞同!

巷口酒肆

JavaScript这门语言学习起来总是很费劲!

    有11位网友表示赞同!

伪心

看来面试题真得要提前准备才行啊!

    有19位网友表示赞同!

冷风谷离殇

期待博客能深入浅出讲解这些概念!

    有5位网友表示赞同!

╯念抹浅笑

闭包和作用域是JavaScript的基础知识,要好好掌握。

    有5位网友表示赞同!

墨染殇雪

学习编程真的需要不断地总结和复习!

    有8位网友表示赞同!

爱到伤肺i

面试是一个很好的锻炼机会,要充分利用它!

    有16位网友表示赞同!

〆mè村姑

分享好的资源总是很让人高兴的!感谢博主!

    有20位网友表示赞同!

像从了良

感觉JavaScript越来越复杂了...

    有15位网友表示赞同!

还未走i

学习编程是一场漫长的征程,希望自己能一直坚持下去!

    有16位网友表示赞同!

断秋风

最近也想学习闭包和作用域,来看看这篇博客了解一下。

    有6位网友表示赞同!

嗯咯

看一篇好的博客能省下很多时间和精力!

    有7位网友表示赞同!

孤城暮雨

学习的过程中总会有困惑的地方,希望能找到答案!

    有8位网友表示赞同!

减肥伤身#

分享文章总是很乐意看到的!谢谢!

    有19位网友表示赞同!

命里缺他

希望这篇博客能帮助我更好地理解JavaScript!

    有5位网友表示赞同!

【深入探讨JavaScript核心面试题:闭包与变量作用域解析】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活