let:
/*
console.log(a)//undefined 只声明未定义
var a = 1;
console.log(a)//1
*/
//1.let 定义的变量没有变量的提升(没有预解释)
//console.log(a)//a is not defined
let
a =
1;
console.
log(
a)
//1
//变量分为全局作用域,局部作用域
function
fn(){
console.
log(
b)
//b is not defined
let
b =
0
}
// fn()
/*
var b=12;
var b=13;
function b(){
console.log(b)
}
console.log(b)//13
b()//报错b is not a function b不是一个函数
*/
//2.let 定义的变量不能重复定义(不管是函数还是变量用let都不能重复定义)
// let b = 12;
// let b = 13;
// console.log(b)//Identifier 'b' has already been declared
//3.虽然不进行预解释,但是代码执行前会将用let定义的变量先过滤一遍,一旦发现不合法
//就直接报错了 所以47行的代码也就不会执行了
/*
console.log(A)
let A=10
let A=20//Identifier 'A' has already been declared
*/
块级作用域:
//{},是一个私有作用域,也叫块级作用域
/*
function fn(){
let a = 0
console.log(a)
}
fn()
*/
//if(){}
//for(){}
let
a=
10;
if(
a){
//console.log(a)//a is not defined
let
a=
1
console.
log(
a)
}
let
oLis=
document.
getElementsByTagName(
'li')
// for (var i=0 ;i<oLis.length;i++){
// oLis[i].οnclick=function(){
// console.log(i)//5
// //绑定事件是异步的 所以都是输出5
// }
// }
for(
let
i=
0;
i<
oLis.
length;
i++){
oLis[
i].
onclick=
function(){
console.
log(
i)
}
}
//自执行函数
{
let
a=
100;
console.
log(
a)
}
let
obj={}
//注意eval将字符串转为对象的时候,一定要加一个()
const:
//const 定义的是静态变量,不能修改,而且必须要赋值
//报错 Missing initializer in const declaration
const
g =
10
//g=20//Assignment to constant variable. 不能被修改
//不可以重复声明
//const g=20//Identifier 'g' has already been declared
let
a=
1
//不管是动态变量还是静态变量 都不可以重复定义
//const a=2//Identifier 'a' has already been declared