以前对JavaScript的认识
- 一个有C++实现的解释型语言而已
由于学习(了解)过编译原理的知识,所以对一门编程语言的实现思路大致的认识。但是,对于编程语言的编译器实现的细节,还是一窍不通的。javaScript就是一个典型的例子。由于一直没去钻研底层实现原理,因此在写一些javaScript程序的时候,总是觉得怪怪的,而且对这一类的解释型语言都是一样的迷迷糊糊。
开始学习JavaScript的底层原理
- 学习书籍《你不知道的javaScript》上中下三册的翻译版本。
学习的上册的第一部分——作用域和闭包。之后,对TypeError有了更深层次的认识(对变量的非法操作)。在阅读这一部分之前,我也思考了:如果是我设计JavaScript我会怎么去解决变量的作用域问题???毕竟是边编译边执行。带着问题,我津津有味的阅读了第一部分。
发现:
- 编程语言的编译和执行过程需要回顾复习一下。
- JavaScript存在独立的作用域模块,从嵌套的作用域中从内到外或者从底层到顶层查找变量。
- JavaScript的函数是可以作为变量进行操作的。
- JavaScript的作用域的本质原理其实是闭包原理。
- javaScript可以使用eval()或者with来改变变量的作用域。
- eval()通过插入动态的JS代码,来改变变量的作用域。
- with是通过对已有的对象进行进一步处理,来改变对象的作用域,同时带来编码的方便。
- eval() 和 with 都是不建议使用的。
- JavaScript目前在ES6下,有const, var, let三个关键词来声明变量,分别表示常量,全局变量,局部变量。
- JavaScript的全局作用域是用来暴露对外的API的,所以不能什么变量都设为全局作用域。
- JavaScript其实也有对象和原型的概念,在第二部分会进一步学习研究。
感受潜心研究的快乐和收获
学习,是一个人的路,去思考问题,理清解决思路,实践方案。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1056615746@qq.com