关于javascript:JavaScript面试题快三正确的倍投6种方法10319281

29次阅读

共计 1211 个字符,预计需要花费 4 分钟才能阅读完成。

[《Python 编程思维》] 加一 Q 一带一你10319281邀一情一玛33339333进【c9183.com】已助上千人成功翻盘,欢迎增加,沟通交流!(https://blog.csdn.net/nokiagu…!想学习的点进来

最近有学员给出一段令人匪夷所思的 JavaScript 代码(据说是某某大厂面试题),废话少说,上代码:



1.  var a = 10;
    
2.  {
    
3.      a = 99;
    
4.      function a() {5.}
    

7.      a = 30;
    
8.  }
    
9.  console.log(a);
    

这段代码运行后果是 99,也就是说,a = 99 将 a 的值从新设为 99,而因为前面应用 a 定义了一个函数,a = 30 其实是批改的 a 函数,或者罗唆说,函数 a 将变量 a 笼罩了,所以在 a 函数的前面再也无奈批改变量 a 的值了,因为变量 a 曾经不存在了,ok,这段代码的输入后果如同能够解释得通,上面再看一段代码:



1.  var a = 10;
    
2.  {3.      function hello() {
    
4.          a = 99;
    
5.          function a() {6.}
    

8.          a = 30;
    
9.      }
    
10.      hello();
    
11.  }
    
12.  console.log(a);
    

大家能够猜猜,这段代码会输入什么后果呢?10?99?30?,答案是 10。也就是说,hello 函数压根就没有批改全局变量 a 值,那么这是为什么呢?

依据咱们后面的论断,当执行到 a = 99 时,笼罩变量 a 的值,而后执行函数 a 的定义代码,接下来执行 a = 30,将函数 a 改成了变量 a,这个解释仿佛也没什么问题,然而,问题就是,与第 1 段代码的输入不一样。第 1 段代码批改了全局变量 a 的值,第 2 段代码没有批改全局变量 a 的值,这是为什么呢?

当初思考 3 分钟 ……..

其实吧,别看这道题很简略,可能有很多程序员都能蒙对答案,反正就这几种可能,一共就 3 个数,蒙对的可能性是 33.3333%,但如果让你具体解释其中的起因呢?这恐怕没有多少程序员能分明地解释其中的原理,当初就让我来给出一个浑然一体的解答:

只管后面给出的两段代码并不简单,但这外面暗藏的信息量相当的大。在正式解答之前,先给出一些知识点:

1. 执行级代码块和非执行级代码块

这里介绍一下两种代码块的区别:

执行级代码块,顾名思义,就是在定义代码块的同时就执行了,看上面的代码:



1.  {
    
2.        var a = 1;
    
3.        var b = 2;
    
4.        console.log(a + b);
    
5.  }
    

这段代码,在解析的同时就会执行,输入 3。

而非执行级代码块,就是在定义时不执行,只有在调用时才执行,很显然,函数代码块属于非执行级代码块,案例如下:



1.  function add()
    
2.  {
    
3.      var a = 1;
    
4.      var b = 2;
    
5.      console.log(a + b);
    
6.  }
    

如果给执行级代码块套上一个函数头,就成了下面的样子,如果只有 add 函数,函数体是永远也不会执行的,除非应用上面的代码调用 add 函数。

正文完
 0