閉包
在外部函數(shù)中定義一個內部函數(shù)
這個內部函數(shù)會操作外部函數(shù)中聲明的變量
并且將這個內部函數(shù)在外部函數(shù)的外面去調用或使用
所形成的閉合回路叫閉包
特點/原理
強行延長了函數(shù)內局部變量的聲明周期,讓這個變量不會被徹底銷毀
var btn = document.getElementById("btn");
function fn1() {
var a = 0;
btn.onclick = function() {
a++;
console.log(a);
}
}
fn1();
定時器
setTimeout
規(guī)定 若干秒之后 執(zhí)行一次且執(zhí)行一次
計時器,每隔若干秒執(zhí)行一次,如果不清楚就一直執(zhí)行下去
定時器,若干秒之后執(zhí)行一次,且只執(zhí)行一次
setTimeout(function(){
console.log(1);
},1000);
計時器
seInterval
計時器是一個方法,這個方法中有兩個參數(shù)
第一個參數(shù),是執(zhí)行的是需要執(zhí)行的代碼片段
第二個參數(shù),是執(zhí)行的時間間隔,單位是ms毫秒
var a = 0;
setInterval(function () {
setInterval(function () {
a++;
}, 1000)
a++;
console.log(a);
}, 1000);
注意!!!!!!!! setInterval 可以嵌套 setInterval
但是!!!!!!!! 千萬千萬不要嵌套!!!
setInterval有返回值,他的返回值是他的id
setInterval的id是數(shù)字
通常從1開始按順序遞增
順序是setInterval創(chuàng)建的順序
除了火狐瀏覽器之外,其他的setInterval的id都是從1開始
火狐瀏覽器是從2開始
function randNum(min, max) {
return Math.round(Math.random() * (max - min) + min);
}
var ooo = document.getElementById('ooo')
var num = 0;
var arr = [11, 22, 33, 44, 55]
var arr1 = ["1", "2", "3", "4", "5", "6", "7", "8", "8", "9", "10", "11", "12", "13", "14", "15", "16"];
/*var d = setInterval(function () {
num = randNum(0, 16);
// console.log(arr[num]);
ooo.innerHTML = (arr1[num]);
a = randNum(0, 255);
b = randNum(0, 255);
c = randNum(0, 255);
ooo.style.backgroundColor = `rgb(${a},$陆错,${c})`
}, 120)
console.log(d);*/
var num = 0;
ooo.onclick = function () {99
if (num % 2 == 0) {
clearInterval(d);
} else {
d = setInterval(function () {
numb = randNum(0, 16);
// console.log(arr[num]);
ooo.innerHTML = (arr1[numb]);
a = randNum(0, 255);
b = randNum(0, 255);
c = randNum(0, 255);
ooo.style.backgroundColor = `rgb(${a},$,${c})`
}, 100)
}
num++;
}
清除計時器
clearInterval
清除計時器 是根據(jù) 在這個計時器的 id 來清除的
var num = 0;
ooo.onclick = function () {99
if (num % 2 == 0) {
clearInterval(d);
} else {
d = setInterval(function () {
numb = randNum(0, 16);
// console.log(arr[num]);
ooo.innerHTML = (arr1[numb]);
a = randNum(0, 255);
b = randNum(0, 255);
c = randNum(0, 255);
ooo.style.backgroundColor = `rgb(${a},$金赦,${c})`
}, 100)
}
num++;
}
開關
var num = 1;
ooo.onclick = function () {
if (num) {
clearInterval(d);
num = 0;
} else {
d = setInterval(function () {
num = randNum(0, 16);
// console.log(arr[num]);
ooo.innerHTML = (arr1[num]);
a = randNum(0, 255);
b = randNum(0, 255);
c = randNum(0, 255);
ooo.style.backgroundColor = `rgb(${a},$音瓷,${c})`
}, 120)
num = 1;
}
}
封裝清除所有定時器的方法
function clearAll(){
var last = setInterval(function () {}, 1000);
for(var i = 1;i <= last;i++){
clearInterval(i)
}
}