- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试过在专业论坛上问这个问题,但没有人为我回答这个问题,但我希望这里有人可以。下面是有问题的代码片段,除了其中的 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
确保变量 me
和 you
将我们标记为个体。这样,即使我们可以有共同点,也可以理解我们并不相同。它还使您可以稍后检查该信息。如果没有 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);
this.data
表示“this
调用此代码的函数实例上的数据变量”等于 allItems()
大概返回一个项目数组,被一个函数过滤掉。由于 Javascript 允许使用称为“匿名”函数的东西,也就是没有名称的函数,因此我们创建了一个匿名函数(未命名函数),它接受 item
的命名参数。filter
方法的函数将返回 includes
方法的结果(很可能在您的代码之前的某处定义),这是从第 1 行 item
传递我们的参数值。结束函数定义
。下一部分回到我之前所说的,this
指的是当前函数调用,除非您指示它不要这样做。 , this);
是程序员说“在我上面声明的这个函数上,我希望 this
引用我当前正在使用的对象。”这部分比较棘手,理解起来肯定需要一些时间,所以如果您不是很确定,请不要太担心。
关于javascript - 函数创建作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37042168/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!