Any application that can be written in JavaScript,
will eventually be written in JavaScript.
--Jeff Atwood
JavaScript
的创造者是Brendan Eich
。
JavaScript
的第一版发布时间与Java稍微晚一点。
JavaScript
这个名字就是为了借Java的势进行宣传, 为此,JavaScript
的很多内置函数
的名称和用法与Java一样。
JavaScript
这个名字是个历史问题,人们提到JavaScript
的时候,其实是指ECMAScript。也就是说,JavaScript
和ECMAScript可以互画等号。
JavaScript Engine
就是能执行且只能执行
ECMAScript定义的那些语法的程序。
常见的JavaScript Engine
:
JavaScript Engine
只能执行ECMAScript定义的那些语法的程序。
JavaScript Runtime
不仅仅能执行ECMAScript定义的那些语法的程序。 还能执行更多。比如:
在Web浏览器中,不仅仅能执行ECMAScript定义的那些语法的程序。 还可以执行BOM API、DOM API、XHR API、Fetch API。
在Node.js环境下, 不仅仅能执行ECMAScript定义的那些语法的程序。 还能执行Node.js自己定义的API,但是不能执行BOM API、DOM API、XHR API、Fetch API等在Web浏览器中的API。
JavaScript Runtime
就是在JavaScript Engine
的基础上增加了功能。 这种方式在软件架构设计中称为分层模型
。Chrome浏览器和Node.js都使用了V8引擎,但是他们都各自基于V8提供了不同功能。
JavaScript
中的模块指的是什么?
JavaScript
中的模块指的就是一个个的js
文件,一个js
文件就是一个模块。 通常,一个js
文件只实现一个功能。
JavaScript
为什么要提出模块的概念呢?有了模块的概念到底能为开发者带来哪些好处?
设计一个模块系统通常会考虑下面这几个问题:
常见的JavaScript
模块系统规范有如下5
种:
规范 | 实现 | 使用环境 |
---|---|---|
AMD | require.js | Web浏览器 |
CommonJS | Node.js | Node.js |
CMD | sea.js | Web浏览器 |
UMD | Web浏览器、Node.js | |
ES6 Module | Web浏览器、Node.js |
这里的约定俗成不是语言规范,你可以不遵守,但是这些约定俗成的东西是大家达成共识的一些做法, 在看别人的代码的时候,你不知道这些约定可能会困扰。
JavaScript
没有公有变量
、私有变量
这些概念, 但是为了告诉看代码的人,某个变量不希望被外部引用,就在变量前面加上下划线,别人看到就不会在外部使用了, 在团队开发中,这种约定很有必要。
理由同上。