为什么Javascript Array.sort
函数在将不正确的比较函数(即带有参数数量的函数!= 2)传递给它进行排序时不会抛出错误。根据我的理解,sort函数具有可选的compareFunction函数。此函数需要2个参数。
示例1:compareFunction与1个参数
var ar = [1,4,2,3];
console.log(ar.sort(function(a){return 2-a;}));
控制台上的输出
VM239:2 [4, 2, 3, 1]
示例2:compareFunction与2参数
var ar = [1,4,2,3];
console.log(ar.sort(function(a,b,c){return a-b-c;}));
控制台上的输出
VM408:2 [1, 4, 2, 3]
答案 0 :(得分:1)
您可以使用任意数量的参数重载函数,因为参数来自函数的'arguments arraylike object'。所有额外参数都被忽略,因此您的sort函数不会为它抛出错误。 对于这些事情,Javascript非常灵活。 :)
答案 1 :(得分:1)
由于JavaScript没有其他语言中存在的概念,例如"方法重载",发送到方法的参数只被分配给名为arguments的特殊对象数组,您可以直接访问,或者只是在函数声明中为每个预期值的位置使用变量。
即:
具有如下功能:
function sum(){
var t = 0;
for(var i = 0; i < arguments.length;i++){
t = t + arguments[i];
}
return t;
}
允许您调用以下函数:
sum();
sum(1,2);
sum(1,2,3);
答案 2 :(得分:1)
Javascript中的函数忽略(除了特殊变量参数)任何其他参数,任何缺少的参数都取值undefined
。这意味着对于定义的函数
function lol(a, b) {
console.log(a);
console.log(b);
}
您也可以这样称呼它
lol(1, 2, 3);
并且JavaScript只会忽略第3个参数而不会出错。它会输出
1 2
你可以这样称呼它
lol(1);
并且JavaScript不会出错。参数b将取值undefined,控制台将显示
1 undefined
请注意,在所有情况下,您都可以使用函数中的特殊变量arguments
来访问参数的数量和额外的参数
看看你的例子,发生了什么
var ar = [1,4,2,3];
console.log(ar.sort(function(a){return 2-a;}));
b缺少,但功能不会介意。
在
var ar = [1,4,2,3];
console.log(ar.sort(function(a,b,c){return a-b-c;}));
c总是undefined
,但函数不会介意。
关于效果,返回值(2 - a)和NaN分别对实际排序Bergi's answer进行了解释(最后一段)
答案 3 :(得分:0)
我发现这个有用的信息可以准确描述内部的javascript来回答问题
sf::RenderWindow window(sf::VideoMode(800, 600), "text");
bool WINDOW_HAS_FOCUS = false;
while(window.isOpen())
{
sf::Event event;
while(window.pollEvent(event))
{
if(event.type == sf::Event::LostFocus)
{
WINDOW_HAS_FOCUS = false;
}
else if(event.type == sf::Event::GainedFocus)
{
WINDOW_HAS_FOCUS = true;
}
}
// ... later in program ...
if(WINDOW_HAS_FOCUS)
{
// do something
}
window.clear();
// etc drawing code
}