到目前为止,同学你知道了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是边解析边运行的嘛!我懂的,这个课本上有说。但是好多课本好像只说了边解析边运行,但是没说是怎么解析的,就算有说了,那也是废话比这篇博文还多,还说不清楚。到此,前面高呼三声那个问题的答案,想必看官到此也看出答案了:解析器动了你的代码!
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26
学习是年轻人改变自己的最好方式