console.log(a);//这种所谓变量提升 怎么看都是一个bug
var a=1;
//console.log(b);//使用let 就避免的了这种bug
//let b=10;
//----------------//
for(var i=0;i<10;i++){
//do nothing
}
console.log("i : "+i);
for(let j=0;j<10;j++){
//do nothing
}
//console.log("j : "+j);//j 此时没有定义
var a=[];
for (var i=0;i<10;i++){
a[i]=function(){
//这里a[i]保存的其实是一个地址(值) 把函数所在的指针赋给了此数组
//可以想象到a数组 保存的都是10个相同的指针
console.log(i)
}
}
a[6](); //return 10
var a=[];
for (let j=0;j<10;j++){
console.log("loop in: "+j);
a[j]=function(){
//这里a[i]保存的其实是一个地址(值) 把函数所在的指针赋给了此数组
//可以想象到a数组 保存的都是10个相同的指针
console.log(j)
}
}
a[6](); //可以理解为 let 强行解决了上述这个bug.
//--------不允许重复声明--------//
function func(){
let a=10;
//var a=1; //不允许重复声明
}
function func1(arg){
// let arg; //形参已经定义过了 不能在里面再定义一遍.
}
function func2(arg){
{
let arg; //块内部 可以声明
}
}
//-----------块级作用域------------//
var temp=new Date();
(function f(){
console.log(temp);
if(false){
var temp='hello world';
}
})() //由于bug一样的变量提升,f函数执行前 会先定义所有变量. temp=undefine. 然后开始执行.
var s = 'hello';
for (var i = 0; i < s.length; i++) {
console.log(s[i]);
}
console.log(i); // 5 i作为全局变量 泄露了出来.
(function f1(){
let n=5;
if(true){
let n=10;
}
console.log(n)
})()
const PI=3.14156;
console.log(PI)
//PI=3 //TypeError: Assignment to constant variable.
//--------const 本质---------------//
const foo={};
foo.prop=123;
console.log(foo.prop);
//const 只能保证常量指针的指向的位置固定不变. 其内部的属性是管不住的.
//如果真想冻结 请使用Object.freeze方法
console