生活挺美好的,越努力越美好。因为还有很多:要认识的人,要看的风景,要去的城市,要买的东西!

总结:
- 函数是一等公民;函数会声明提升,函数表达式不会;要用 先定义,按规范来写;
- for -of 取内容,for in 取索引;
JS语法
function 函数名(参数列表) {
函数体;
return 返回值;
}
function add(x, y) {
return x + y;
}
console.log(add(3, 5));
1. 函数表达式
使用表达式来定义函数,表达式的函数名称可以省略,如果这个函数名称不省略,也只能用在此函数内部;
// 匿名函数
const add = function(x, y) { // 将函数赋值给add ;
return x + y;
}
console.log(add(4,5))
// 有名字的函数表达
const sub = function fn(x,y) {
return x - y;
};
console.log(sub(5, 3));
//console.log(fn(3, 2)); // fn只能用在函数内部
// 有名字的函数表达式
const sum = function _sum(n) {
if (n == 1) return n;
return n + _sum(--n) // _sum只能内部使用
}
console.log(sum(4));
2. 函数、匿名函数、函数表达式的差异
函数和匿名函数,本质上都是一样的,都是函数对象,只不过函数有自己的标识符——函数名,匿名函数需要借助其它的标识符而已。
区别在于,函数会声明提升,函数表达式不会。
// 函数的声明 提升 ,可以先放到 前面
console.log(sum(4))
function sum(n) {
if (n==1) return 1;
return n+sum(--n);
}
// 匿名函数
function add (x, y){ // 声明提升
return x + y;
};
//console.log(sub(5, 3)); //sub未定义
// 有名字的函数表达式
const sub = function (x, y){
return x - y;
};
console.log(sub(5, 3));
3. 高阶函数
高阶函数:函数作为参数或返回一个函数
完成一个计数器counter
function counter () {
let c = 0;
return function(){
return ++c
};
};
const c = counter()
console.log(c())
console.log(c())
console.log(c())
#-------------------------------------------------------
1
2
3
// 生成器版本:
function *counter() {
let c = 0;
while (1)
yield ++c;
}
const inc = counter() ; // 生成器对象;
console.log(inc.next())
console.log(inc.next().value) //
console.log(inc.next().value)
#----------------------------------------------------------------
{ value: 1, done: false }
2
3
map函数
完成一个map函数:可以对某一个数组的元素进行某种处理
// ES 262
function map(fn, arr) {
let newarr = [];
for (let i=0;i<arr.length;i++)
newarr[i] = fn(arr[i])
return newarr;
}
console.log(map(x => x+10,[1,2,3,4]))
console.log(map(function(x){return x+10},[1,2,3,4]))
#--------------------------------------------------------------------------------------------
[11,12,13,14]
map的生成器实现
var map = function* (fn, arr){
for (i in arr)
yield fn(arr[i]);
};
let newarr = map(x => x + 10, [1, 2, 3, 4]);
for (x of newarr)
console.log(x);
网友评论