带有函数的 JavaScript 语法

Javascript syntax with functions

本文关键字:JavaScript 语法 函数      更新时间:2023-09-26

我不确定这是什么意思,也不确定如何正确措辞。

在第一个示例中,我可以将变量放在函数"numbers1.forEach(...("之前,但在第二个示例中,我不能"num.square(("?

function forEach(array, action) {
  for (var i = 0; i < array.length; i++)
    action(array[i]);
}
var numbers2 = [1, 2, 3, 4, 5], sum = 0;
forEach(numbers2, function(number) {
  sum += number;
});
console.log(sum);
// → 15
var numbers1 = [1, 2, 3, 4, 5], sum = 0;
numbers1.forEach(function(number) {
  sum += number;
});
console.log(sum);
// → 15
// this works!

但这行不通

var square = function(x) {
  return x * x;
};
var num = 12;
console.log(square(num));
// → 144
console.log(num.square());
// → TypeError: undefined is not a function (line 9)
// does not work?

谢谢!

语法

方面,这里没有"魔术"发生。你描述的是两件截然不同的事情。

在第一个示例中,您将Array传递给自己定义的forEach方法。在第二个示例中,您调用的forEach实际上是 Array 上的内置方法(请参阅 MDN(。如果您将forEach更改为不调用action,您将看到您的中断,第二个仍然有效。

您可以自己实现此功能。你可以添加一个函数来Number使你的第二个示例工作(尽管这不是推荐的做法,因为它可能会与未来的JavaScript功能[和许多其他原因]发生冲突或破坏现有功能(:

Number.prototype.square = function() {
      return this * this;
};
var num = 12;
var squared = num.square();
alert(squared);

如果从第一个示例中删除forEach函数,它仍然有效,这是因为 Array 类型具有内置的forEach函数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

或者尝试将forEach函数更改为each,您将看到它将不再起作用。

您尝试做的是向现有类型添加新方法。这在 JavaScript 中不是好的做法。

数组

的例子之所以有效,是因为JavaScript (ECMAScript5(中的Array定义了forEach函数。

带有数字的示例不起作用,因为Number没有定义square函数。您可以扩展Number以包含方形函数,如下所示:

Number.prototype.square = function(x) {
  return this * this;
};