Javascript 带函数的语法
Javascript syntax with functions
我不确定这意味着什么或如何正确表达问题。
在第一个示例中我可以将变量放在函数之前 "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?
谢谢!
数组的示例有效,因为 JavaScript (ECMAScript5) 中的 Array
定义了一个 forEach 函数。
带有数字的示例不起作用,因为 Number
未定义 square
函数。您可以扩展 Number
以包括这样的平方函数:
Number.prototype.square = function(x) {
return this * this;
};
语法方面,这里没有 "magic"。你描述的是两件截然不同的事情。
在您的第一个示例中,您将 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.
中不是好的做法
我不确定这意味着什么或如何正确表达问题。
在第一个示例中我可以将变量放在函数之前 "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?
谢谢!
数组的示例有效,因为 JavaScript (ECMAScript5) 中的 Array
定义了一个 forEach 函数。
带有数字的示例不起作用,因为 Number
未定义 square
函数。您可以扩展 Number
以包括这样的平方函数:
Number.prototype.square = function(x) {
return this * this;
};
语法方面,这里没有 "magic"。你描述的是两件截然不同的事情。
在您的第一个示例中,您将 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.
中不是好的做法