1. Javascript实现由三部分组成:
- 核心:ECMAScript
- 文档对象模型DOM
- 浏览器对象模型BOM
2. ECMAScript数据类型:
基本类型值:
- Undefined、Null、Number、Boolean、String
引用类型值:
- Object
3. Javascript 没有块级作用域,只有全局作用域和函数作用域,在if和for中有明显体现,在ES6新增了块级作用域
for(var i=0;i<10;i++){
doSomething(i);
}
alert(i); //10
4. 声明变量会自动添加到最近的环境中,比如在函数内,最接近的环境就是函数的局部环境。另外函数声明在es5中只能在顶层作用域中或者函数作用域中,不能在块级作用域中,而在es6中是被允许的。所以在块级作用域中不论是声明变量(var,let)还是函数(function)将会被提升出块级作用域,添加到最近的局部环境(函数作用域或全局)
ES5
function f() { console.log('I am outside!'); }
(function () {
if (false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
//在es5中块作用域中声明函数是会报错的
//Uncaught TypeError: f is not a function
}
f();
}());
上面的代码在ES6中同样会报错,实际运行的是下面的代码
function f() { console.log('I am outside!'); }
(function () {
var f = undefined;
if (false) {
function f() { console.log('I am inside!'); }
}
f();// Uncaught TypeError: f is not a function
}());
es6中块作用域声明函数后提升到最近的作用域中既(function(){})(),同样会报错
上面同样的代码转化为ES6(可以通过babel)相当于下面的代码
function f() { console.log('I am outside!'); }
(function () {
if (false) {
// 重复声明一次函数f
var _f = function _f() {
console.log('I am inside!');
};
}
f(); //I am outside!
})();