回调函数、闭包、还有vue reduce

回调函数

回调函数是一段可执行的代码段,它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用这段(回调函数)代码。

在JavaScript中函数也是对象的一种,同样对象可以作为参数传递给函数,因此函数也可以作为参数传递给另外一个函数,这个作为参数的函数就是回调函数

this的使用

注意在回调函数调用时this的执行上下文并不是回调函数定义时的那个上下文,而是调用它的函数所在的上下文。

var obj = {
	sum: 0,
	add: function(num1, num2){
		this.sum = num1 + num2;
	}
};

function add(num1, num2, callback){
	callback(num1, num2);
};

add(1,2, obj.add);
console.log(obj.sum);			//=>0
console.log(window.sum);		//=>3

上述代码调用回调函数的时候是在全局环境下,因此this指向的是window,所以sum的值是赋值给windows的。

关于this执行上下文的问题可以通过apply方法解决。

var obj = {
        sum: 0,
        add: function(num1, num2){
            this.sum = num1 + num2;
        }
    };

function add(num1, num2, callbackObj, callback){
	callback.apply(callbackObj, [ num1, num2 ]);
};

add(1,2, obj, obj.add);
console.log(obj.sum);			//=>3
console.log(window.sum);		//=>undefined

闭包

闭包函数:声明在一个函数中的函数,叫做闭包函数。

闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。

Vue reduce函数

语法

arr.reduce(callback,[initialValue])

reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。

callback (执行数组中每个值的函数,包含四个参数)
 
    1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
    2、currentValue (数组中当前被处理的元素)
    3、index (当前元素在数组中的索引)
    4、array (调用 reduce 的数组)
 
initialValue (作为第一次调用 callback 的第一个参数。)

将多维数组转化为一维

//递归写法
let arr = [
  [0, 1],
  [2, 3],
  [4, [5, 6, 7], [8, 9, 10]],
];
const newArr = (arr) => {
  return arr.reduce(
    (pre, cur) => pre.concat(Array.isArray(cur) ? newArr(cur) : cur),
                                                  // ?此时的cur为[5, 6, 7],返回后重组到pre里面,此处的三元运算符为递归终止
    []
  );
};
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

let oldArr = arr.reduce((pre,cur)=>{
  return pre.concat(cur)
},[])
console.log(oldArr); // [0, 1, 2, 3, 4, 5]

参考:

vue reduce函数的用法 – 幽冥狂_七 – 博客园 (cnblogs.com)

JavaScript回调函数 – CNode技术社区 (cnodejs.org)

闭包,看这一篇就够了——带你看透闭包的本质,百发百中_羊二哥的博客-CSDN博客_闭包

什么是闭包?闭包的优缺点? – cc_ccc – 博客园 (cnblogs.com)

箭头函数 – JavaScript | MDN (mozilla.org)

vue reduce函数的用法 – 幽冥狂_七 – 博客园 (cnblogs.com)

Array.isArray() – JavaScript | MDN (mozilla.org)

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

评论

  1. 2 周前
    2024-5-05 17:17:02

    Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇