到目前为止,同学你知道了JavaScript的历史,也了解其“你想是啥就是啥”的变量系统。相信凭借你深厚的Java或者C++功底,再加上程序员特有的自傲气质,你肯定会信心满满:自信写JavaScript毫无压力。我也相信写个Script对于后端攻城师们那肯定不在话下。但是,当结果匪夷所想的时候,你或许会一番吐槽:真TM见鬼了,会不会是什么bug?还是浏览器有问题?我的代码逻辑没问题啊......。就像如下代码,你能说出结果是什么吗? 

var a=123;var b=999;function func(a){    var b;
  console.log(a);//?????? 结果是什么????留着分析
  var a=888;
  c=1111;function a(){
      }    console.log(a);//?????? 结果是什么????留着分析
  console.log(b);//?????? 结果是什么????留着分析
  console.log(c);//?????? 结果是什么????留着分析}func(456);

  是的,你的代码没有问题,当然浏览器也没问题。你或许说我才不会写得满屏都是“a”的代码!讲真的,当你看到这段代码的时候,你有没有想过为什么JavaScript能够这样重复定义同名的变量?本楼敢打赌十个看客中,能有一个提出这个疑问,那已经是惊喜了。可能有人会说“因为它是弱类型言语”,这个答案只能说对了一半。这看似很不科学、很不严谨的变量定义,怎么能够运行起来呢?很明显不科学。答案是:有人动了你的代码!

  有人动了你的代码!有人动了你的代码!有人动了你的代码!重要的事说三遍!那是谁动了你的代码呢?故事又开始了。

  这事还得回到九十年代JavaScript出生那会。话说布兰登-艾奇当时创造JavaScript的时候,他的需求就是做做客户端的数据验证而已。于是乎,他想“这玩儿没必要搞高能设计,看上去好像也没有什么地方需要高能运算的,搞预编译、链接器那是太浪费了,再说这玩儿是在浏览器上跑的,搞编译器、链接器,那浏览器不成了IDE啦?最好能像Perl那样,边解析边运行最美不过”。鞋同们看到这里应该明白了:那么多废话,你就不是为了说JavaScript是边解析边运行的嘛!我懂的,这个课本上有说。但是好多课本好像只说了边解析边运行,但是没说是怎么解析的,就算有说了,那也是废话比这篇博文还多,还说不清楚。到此,前面高呼三声那个问题的答案,想必看官到此也看出答案了:解析器动了你的代码!

延伸阅读

学习是年轻人改变自己的最好方式-Java培训,做最负责任的教育,学习改变命运,软件学习,再就业,大学生如何就业,帮大学生找到好工作,lphotoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训学习是年轻人改变自己的最好方式