一个函数要使用另一个函数中的数据
1.把局部数据return出去,变成全局的数据
let fn1 = function(){
let num = 10;
return num;
}
let num = fn1();
let fn2 = function(){
console.log('fn2'num);
}
fn2();
2.通过调用函数时传参:让"函数的调用"跟局部的数据在同一个作用域
let fn2 = function(num){
console.log('fn2',num);
}
let fn1 = function(){
let num = 10;
fn2(num);
}
fn1();
函数的作用域
作用域的分类
1.全局作用域
2.局部作用域(函数作用域,大括号里面的叫块级作用域)
3.eval()作用域:它会把括号里面的字符串当作正常的js代码进行解析然后运行
eval("console.log"('hello'));
函数提升
声明式函数会发生函数提升,创建的整个函数全部提升到代码头部。
fn2();
function fn2(){
console.log('hello');
}
1.函数是“一等公民”
2.提升时函数先提升,变量后提升
3.当变量未赋值时无法覆盖函数
4.但是变量如果赋值会覆盖函数
既没有没有let,也没有var的变量在哪里都是个全局变量
回调函数callback
概念:将一个函数A作为参数(实参)传递给函数B,然后,在函数B中调用函数A,那么,函数A就叫做回调函数。
function a(){
console.log("a");
}
function b(callback){
callback();
};
b(a);
console.log(a);
console.log(a());
arr.sort(function(){});
二.JS中常见的回调函数(操作数组的)
1·forEach();ES6 遍历数组 item元素 index下标
let arr = [10,11,12,13,14];
arr.forEach(function(item,index){
console.log(index);
});
2.map();需要对数组中每一个元素做同样的操作的时候使用.会返回(得到)一个新数组
let arr = [10,11,12,13,14];
let newArr = arr.map(function(item,index){
return item * 2;
});
console.log(newArr);
3.filter();当要给每一个数组做筛选的时候使用
let arr = [10,11,12,13,14];
let newArr = arr.filter(function(item,index){
return item % 2 === 0;
});
console.log(newArr); 能够筛选出里面所有的偶数,并返回一个新数组
let arr = [10,11,12,13,14,10,11,12];
let newArr = arr.filter(function(item,index){
return arr.indexOf(item) === index;
});
console.log(newArr);
4.reduce();
let arr = [10,11,12,13,14];
let result = arr.reduce(function(a,b){
console.log(a,b);
return a + b;
});
console.log(result);
let arr = [10,11,12,13,14];
let result = arr.reduce(function(a,b){
return a > b ? a : b;
}); 找最大值
console.log(result);
5.every();对数组每一个元素做判断如果有一个为假全都是假(一假全假)
let arr = [10,11,12,13,14];
let result = arr.every(function(item,index){
return item < 30;
});
console.log(result);
6.some();对数组的每一个元素做判断如果有一个元素为真全部都是真(一真全真)
let arr = [10,11,12,13,14];
let resule = arr.some(function(item,index){
return item < 30;
});
console.log(resule);
随机数
console.log(Math.random() * 10 + 10);
Math.random()0-1取不到1
1-10
Math.random() * 9 + 1
1-20
Math.random() * 10 + 10
13-19
Math.random() * 6 + 13