gpt4 book ai didi

javascript - 函数创建作为参数?

转载 作者:行者123 更新时间:2023-11-30 09:49:53 27 4
gpt4 key购买 nike

我试过在专业论坛上问这个问题,但没有人为我回答这个问题,但我希望这里有人可以。下面是有问题的代码片段,除了其中的 2 位,我知道它是如何工作的。

this.data = allItems().filter(function(item) {
return this.includes(item);
}, this);

如上所述,我只理解上面代码的两部分:这种类型的函数叫什么?回电话?在名为“item”的主函数中没有名为“item”的函数或变量。最后,为什么“this”是片段的一部分?

很抱歉,如果这还不够,我会尽量详细地回答这个问题,因为我不熟悉这种脚本风格。我对这个主题做了一些研究,我能得到的最接近的解释是私有(private)函数,但正如我上面提到的,任何地方都没有名为“item”的函数。

最佳答案

Javascript 是一种有点奇怪的语言。对于我们这些首先学习编译型编程语言的人来说,它具有相同的视觉美感,但幕后却大不相同。首先要了解的是,在 javascript 中,每个函数都是一个特殊的引用,称为 this。它引用函数的当前迭代。

可以这样想:有一个名为 Human 的类,它定义了一组所有人类共有的属性——我们有高度和体重、名字、眼睛颜色、头发颜色等等。但是我,高度 5 英尺 8 英寸,体重 200 磅,淡褐色眼睛和秃头与您或任何其他人的描述不同。虽然肯定有另一个人具有这些特征,但我们不一样.

var Human = function(name, height, weight, eye_color) {
this.name = name;
this.height = height;
this.weight = weight;
this.eye_color = eye_color;
}

var me = new Human('Jhecht', '5.8', 200, 'hazel');
alert(me.name); //Alerts 'Jhecht'
var you = new Human('Gatene', '6.0', 190, 'brown');
alert(you.name); //Alerts 'Gatene'

代码中的 this 确保变量 meyou 将我们标记为个体。这样,即使我们可以有共同点,也可以理解我们并不相同。它还使您可以稍后检查该信息。如果没有 this,我只会将每个变量设置为等于其自身 (name=name),这让我没办法 稍后查看其内容。如果我删除了 this.name 并将其替换为 name,那么如果我尝试调用 alert(me.name)<,我将不再获得预期的结果(我很可能会得到一个未定义的值)当用于 HTML 元素的事件监听器时,this 将引用 HTML 元素,除非您另有说明。

与其他语言中的函数相比,javascript 中的函数也不那么严格(我不认为这是正确的词,但它是我得到的最好的词)。请注意,在我上面的代码中,我像这样设置了我的函数:

var Human = function(name, height, weight, eye_color) ...

我也可以像这样创建该函数:

function Human(name, height, weight, eye_color)...

结果是一样的。

所以在您的代码片段中,让我们逐行查看。

this.data = allItems().filter(function(item) {
return this.includes(item);
}, this);
  1. this.data 表示“this 调用此代码的函数实例上的数据变量”等于 allItems() 大概返回一个项目数组,被一个函数过滤掉。由于 Javascript 允许使用称为“匿名”函数的东西,也就是没有名称的函数,因此我们创建了一个匿名函数(未命名函数),它接受 item 的命名参数。
  2. 传递给第 1 行中的 .filter 方法的函数将返回 includes 方法的结果(很可能在您的代码之前的某处定义),这是从第 1 行 item 传递我们的参数值。
  3. 结束函数定义。下一部分回到我之前所说的,this 指的是当前函数调用,除非您指示它不要这样做。 , this); 是程序员说“在我上面声明的这个函数上,我希望 this 引用我当前正在使用的对象。”

这部分比较棘手,理解起来肯定需要一些时间,所以如果您不是很确定,请不要太担心。

关于javascript - 函数创建作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37042168/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com