命令总结
touch 创建文件、 mkdir 创建文件夹、 cd 文件夹名、 cat 文件夹名
let/const和var区别:
- 块级作用域 (***)
- 不会变量提升
- 不污染全局变量
- 不能重复声明同一个变量
- 有常亮了(基本数据和引用数据类型的问题)(声明必须赋值)
- 暂时性死取问题(必须先声明后使用)
eg1:块级作用域 if/else, for ,while switch...
var oAs = document.getElementById('box').getElementsByTagName('a');
for (var i=0;i<oAs.length;i++) {
oAs[i].onclick = function() {
console.log(i);
}
}
console.log(i);
1.闭包解决
for (var i=0;i<oAs.length;i++) {
(function(i){
oAs[i].onclick = function() {
console.log(i);
}
})(i)
}
2.ES6作用域解决
for父级作用域, 里面子作用域
for (let i=0;i<oAs.length;i++) {
oAs[i].onclick = function() {
console.log(i);
}
}
面试题:
for(var a = 0; a < 3; a++) {
setTimeout(function() {
console.log(a);
}, 1000);
for(var a = 0; a < 3; a++) {
(function(a){
setTimeout(function() {
console.log(a);
})(a)
}, 1000);
for(let a = 0; a < 3; a++) {
setTimeout(function() {
console.log(a);
}, 1000);
eg2: 不污染全局变量了
let a = 1;
console.log(window.a); // ==> undefined
eg3:不能重复声明
function fn(a, b, c) {
let b = 1; // ==>>不能重复声明
}
###ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法。