功能描述:setTimeout使用闭包,判断数组某个值并进行多种方法去除
主要考点:
2.1 setTimeout如何解决异步操作里变量混乱→(1.独立块作用域,2.使用setTimeout第三参数,3.闭包自执行匿名函数)
2.2 去除数组某个数值的方法 →(1. push(),2. spliace(), 3. ES6新增的filter过滤, 4. forEach())
框架:elementui
相关代码
<script>
export default {
data(){
return{
}
},
mounted(){
this.count()
this.arrayOut()
},
methods:{
count(){
// 题目:以下输出需要为0,1,2,3,4,5
// 分析:因为是异步操作,所以需要等待执行完每个回调函数才能进行打印操作而现在i都是固定一个值
for(var i = 0; i < 5; i++){
setTimeout(function(){
console.log(i);
},1000)
}
//解法一 let 是块作用域,所以会分配独立5个块,里面的变量i相互独立且不影响
for(let i = 0; i < 5; i++){
setTimeout(function(){
console.log('解法一',i);
},1000)
}
//解法二 setTimeout的第三个参数(先执行)回传到第一个参数,j =>{ console.log('解法二',j); }中进行执行
for(var i = 0; i < 5; i++){
setTimeout(j =>{
console.log('解法二',j);
},1000,i)
}
//解法三 闭包方法 (i)是立即函数,而且把全局变量i转换成局部变量i,是个封闭的作用域,内部可以访问外部变量,但反之不能,返回的变量传到j变量中
for(var i = 0; i < 5; i++){
(j =>{
setTimeout(() => {
console.log('解法三',j);
},1000)
})(i)
}
},
// 题目:已知 var arr = [4,0,7,9,0,0,2,6,0,3,1,0];
// 要求将数组中的 0 项去掉,将不为 0 的值存入一个新的数组,生成新的数组。
arrayOut(){
var arr = [4,0,7,9,0,0,2,6,0,3,1,0];
//写法一 使用push()
var newArr = []
for( var count = 0 ; count<arr.length ; count++){
if(arr[count] != 0){
newArr.push(arr[count])
}
}
console.log('替换后的数组为',newArr)
//写法二 使用splice()
for( var count = 0 ; count<arr.length ; count++){
if(arr[count] == 0){
arr.splice(count,1)
// 原数组移出一位,需要相应地减去计数器的1位
count--
}
}
console.log('替换后的数组为',arr)
//写法三 使用filter过滤器
var newArr2 = arr.filter( arr => arr != 0 )
console.log('替换后的数组为',newArr2)
//写法四 使用forEach进行遍历
var newArr3 = []
arr.forEach( arr => {
if(arr > 0){
newArr3.push(arr)
}
} )
console.log('替换后的数组为',newArr3)
}
}
}
</script>