近年来,应用设计网页的用户领域蓬勃发展,并出现了一些技术框架,如打字稿。对于前端Web设计工作的面试问题也将随着新技术的出现调整,但一些基本的内容不会改变,如果您在基本的采访这些问题的失误,用人单位一般是零容忍。让你自己走吧。
在这篇文章中笔者分析在JavaScript中var关键字的一些问题的奇怪行为。
Q1:
考虑以前的代码将输出什么?是输出招呼,或者不确定仍报告错误?
对于Java或C#等语言,不可能重复声明相同的变量,但它与JavaScript兼容。当变量第一次声明之后,后面的再次声明会被忽略掉,但是之后再给变量赋的值会覆盖掉前一次赋的值。那么这个问题的答案是:0x9A9A]。
hello
函数test(){function f(){var m=9; console.log(m);}考虑以前的代码将输出什么?我们在测试方法中声明方法f,并在方法f中声明变量m。但是,代码改变了方法F以外的方法的内部变量f米。什么是第二次打印?
毫无疑问,此代码首次打印Q2:。第二次打印时是9。当您看到结果时,您是否感到有点惊讶,特别是对于从事C语言和Java语言开发的程序员而言?在C级的块级别中没有范围的概念,JavaScript中的Java语言
50所以我们称这种现象为“在JavaScript中,在function内部定义的变量,无论它处于哪一层的代码块(if、for、function等代码块),都会将其作用域提升至function这一层来。”。
函数作用域
函数test(){var sum=0,arr=[[1,2],[3,4],[5,6]]; for(var i=0; i考虑以前的代码将输出什么?这段代码的目的是添加arr的二维数组的值。执行此代码后,您会发现打印值为Q3:。
这种结合Q1和Q2,我们知道变量i在测试两个环路都是平等的,所以这个问题是非常清楚后第一里面的内循环的结束,我的值是2,然后i ++在外部外部循环中运行。此时,i的值变为3,并且外部0x7D0的判断条件不成立时,并且环路被直接和退出,以便实际上只被添加的1的总和2退出循环,答案是3。
为了使程序的输出是正确的,只是改变变量i0x7D0 j的。
3
对于(VAR I=0; I <3; i ++在){的setTimeout(函数(){的console.log(I)},100 * I);}
考虑以前的代码将输出什么?此代码是在面试过程中经常被问到的问题。结果是:Q4:而不是预期的3 3 3。
因为同样,在Q2的情况下,变量i是相同的i,则函数的setTimeout循环结束后开始计时,并且在循环结束后i的值变为3,通过你得到了以前的结果。
为了使程序输出正确,您可以使用立即执行功能(IIFE),如下所示:
For(var i=0; i <3; i ++){(function(i){setTimeout(function(){console.log(i);},100 * i);})(i);}
0 1 2
本文通过代码四段分析的重复的功能和JavaScript语句的区域的问题。实际上,这些问题反映了开发人员的基本技能和代码规范知识。在日常开发中,我们应该避免编写尽可能多的模糊代码。
要学习任何编程语言,你需要设置的基本技能,所谓的核心能力不强,在地动山摇。除了坚实的基础,必须有良好的代码规范。只是在做这两件事情,我们可以任由风吹浪开始,稳坐钓鱼台并立于不败之地。
总结:
您的关注、点赞和评论将是我不断创作的动力
如果喜欢,请点击屏幕右上角,分享至朋友圈