//这道题涉及了异步、作用域、闭包
/*
setTimeout是异步执行,所以for会先执行完,因为同步优于异步优于回调函数
每一次for循环的时候,settimeout都执行一次,但是里面的函数没有被执行
而是被放到了任务队列里面,等待执行,for循环了4次,就放了4次,当主线程执行完成后,才进入任务队列里面执行
*/
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
//输出:5
/*
* 模拟重载
* JS因为其函数参数是作为一个数组来存在的,所以JS没有函数签名,无法实现真正的重载
但是通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载
*/
function overLoading(){
//根据arguments.lengthd对不同的参数数量进行操作
switch(arguments.lengthd){
case 0:
//操作1的代码;
break;
case 1:
//操作2的代码;
break;
//后面还有许多case。。。。。
default: console.log('函数出错');
}
}
//重载:具有一组相同名字,不同参数列表的函数(方法)。
//JS中“函数是一个对象,函数名是一个指向对象的指针”所以这也可以帮助我们理解JS为什么无法实现重载
function addSomeNumber(num) {
return num + 100;
}
function addSomeNumber(num) {
return num + 200;
}
var result = addSomeNumber(100);
console.log(result);
//输出:300
//寻找数组最大和最小数值的方法
//第一种:排序法
var arry = [3,2,5,1,6,7];
arry.sort(function(a,b){return a-b;});
var minN = arry[0];
var maxN = arry[arry.length-1];
console.log(minN);
console.log(maxN);
//先升序排序然后再根据升序后的元素位置找到当前最小最大的元素
//第二种:Math的max和min方法
//利用apply的扩充作用域然后使用Math方法
var arry = [3,2,5,1,6,7];
var max = Math.max.apply(Math,arry);
var min = Math.min.apply(Math,arry);
console.log(min);
console.log(max);