前言:在此专栏中将会讲到 js 基础性的知识,包括但不仅限 es5、es6。将知识点与实际应用相结合,从理解到开发。每一次学习都有所收获,每一次重温知识点都加深印象,每一次掌握一种新知识都像打开了新世界的大门。希望在自己学习的同时能够帮助更多的人学习和理解。同时也欢迎各位猿友提出宝贵的建议和交流,有不对的地方还请赐教。
一. 开门见山
基本上每种语言的语法都有相似之处,学过一种那么其他的语法都好理解。在这里不过多地介绍语法相关知识,为了能够让小白中的小白也能理解,个别地方会详细说明。
1.使用
作为一种灵活性很高的解释型脚本语言,JavaScript 可以使用
script
标签引入并在标签内写方法,可以使用export
import
exports
在各个模块间相互引用。
1)script
可以通过script
标签的src
属性引入 js 文件,可以在script
标签内部书写 js 代码。
- script 标签在 html 界面中按自上而下的顺序依次执行,如果其中一个在加载中,其它文件需要等待其加载完再加载,如果 script 引入文件数量较多且体积较大,那么将会影响界面的渲染效果比如样式的渲染。所以一般将 script 放置 body 末尾。
- script 标签内部的 js 代码没有异步操作的情况下按照书写顺序执行
- script 标签可以跨域,也就是耳熟能详的
jsonp
(其他跨域标签之后统一讲解)
2)export
es6 中可以使用export default
导出模块,如:export default 666
3)import
es6 中可以使用import A from B
引入模块,可以使用import {a} from B
引入变量
4)exports
在 commonjs 中使用exports.default
导出模块,使用 require(‘xxx’),由于 nodejs 早年间也借鉴了 commonjs 模块化思维,所以在 nodejs 中导出也类似,比如使用module.exports
导出模块,使用 require 引入模块。
2.变量
js 遵循的是 ECMAScript 标准,而 ECMAScript 标准中的变量是松散类型的,所以先学习了其他语言比如 c 语言、Java 的同学第一眼可能觉得不可思议,因为 var 既可以定义数字、数组还可以定义字符串。
-
声明
es5 中定义使用 var(读音“哇~”),es6 中使用 let。 -
变量提升
es5 中变量可以重复声明,执行顺序是先声明后初始化,所有声明语句会被提到作用域最顶端先执行,导致变量出现提升。
var a = 0;
console.log(a); //0
console.log(b); //undefined
var b = 9;
在这里 b 变量就发生了提升,真正执行的顺序是:
var b;
console.log(b);
b = 9;
也就是说在打印的时候 b 还没有值,只是声明了并没有定义值。
如果打印的是不存在的没有声明的值则抛出异常not defined
来做一个题目测一下有没有看懂:
var a = 10;
function foo() {
console.log(a)<