part2:let,const,var 案例
1-1
1.1.1
for(var i=0;i<10;i++){
}
console.log(i);//可以访问
1.1.2
for(let j=0;j<10;j++){
}
console.log(j)//会报错 j不存在
1.1.3
var funcs=[];
for(var i=0;i<10;i++){
funcs.push(()=>{
console.log(i)
})
}
console.log(funcs)
funcs.forEach((fun)=>{
fun();//输出10个10
})
修改
1-3-1
var funcs=[];
for(let i=0;i<10;i++){
funcs.push(()=>{
console.log(i)
})
}
console.log(funcs)
funcs.forEach((fun)=>{
fun();//输出0-9
})
1-3-2
var funcs=[];
for(var i=0;i<10;i++){
funcs.push(function(value){
return function(){
console.log(value)
}
}(i))
}
console.log(funcs)
funcs.forEach((fun)=>{
fun();//输出0-9
})
1-3-3
var funcs=[];
var object={
a:true,
b:true,
c:true
}
for(let key in object){
funcs.push(function(){
console.log(key)
})
console.log(key,object[key])
}
funcs.forEach((fun)=>{
fun();//a,b,c
})
/*
当var被用于全局作用域时,它会创建一个新的全局变量作为全局对象(浏览器window)的属性
*/
var RegExp='hello';
var ncz='Hi';
console.log(window.RegExp)//hello
console.log(window.ncz)//Hi
/*
如果你在全局作用域使用let或const,会在全局作用域下创建一个新的绑定,但是该绑定不会添加为全局对象的绑定
*/
let RegExp='hello';
console.log(RegExp===window.RegExp)//false
const ncz="Hi";
console.log('ncz' in window)//false