底层运行机制
抽奖
<style>
#box{
width: 200px;
height: 50px;
border: 1px solid skyblue;
}
</style>
</head>
<body>
<div class="box"id="box"></div>
</body>
</html>
<script>
function getCode(){
var str='0123456789';
var res="";
// i 表示4次
for (var i=0;i<4;i++){
// 随机的下标
var index=Math.floor(Math.random()*10);
// 把上一次的结果拼接
res+=str[index];
}
return box.innerHTML= res;
}
// 这行代码不能删,删掉了一开始的时候没有初始值
getCode();
console.log(getCode);
// 一秒钟切换一次
var timer = setInterval (()=>{
getCode();
},1000);
// 五秒后停止
setTimeout(()=>{
clearInterval(timer);
},1000*5);
</script>
作用域
// 一层一层往外找,这样查找的过程就叫作用域链
// 作用域:变量可作用域
/* 全局作用域
私有作用域
*/
var a = 100;
var c = '全局变量c'
// 全局变量(哪都可以用)
function func(){
/* 私有作用域:以函数划分*/
var a = 200;
var b = '我是局部变量b'
// 私有变量:只能当前作用域使用,全局无法拿到
console.log(a,'里面的a');
console.log(b);
console.log(c);// 如果当前作用域有,不需要往外找
}
func()
console.log(a,'外面的a');
var a =100;// 最终挂在window上
let c = 300; // 不在window上
functionfn(){
var a = 400;// 属于私有的
n=3;// 如果没有关键字创建,也会被挂在window上
}
fn();
console.log(n);
变量提升
// 变量提升(预解析,预编译)将带var的变量提前声明
// 找到带var 和带function的即可
// var 只声明不定义
// 找到带function
// 既声明又定义
console.log(a);// undefined
a =100;
console.log(a);// 100
fn();
functionfn(){
console.log(111);
}
// 变量提升(条件判断)
// 无论if条件是否成立,都会变量提升
//var只声明不定义
//function只声明不定义
console.log(a);//undefined
if (1=="1");{
console.log(a);// undefined
var a =2;
console.log(a);
}
console.log(fn);// undefined
if (1 == "1") {
console.log(fn);// 函数
functionfn() { };// 以函数为分界线,以上有关他的操作都得给全局来一份
fn = 3;
console.log(fn);//3
}
console.log(fn);// 函数
// 如果遇到函数,除了function fn(){} var fn=function(){}会提升,其他不会,自执行函数不会变量提升
f=function(){
return true;
};
g=function(){
return false;
};
~function(){
if(g()&&[]==![]){
f=function(){return false;};
function g(){
return true;
}
}
}();
console.log(f());
console.log(g());// 报错
若有收获,就点个赞吧