如果我在以下代码片段中执行测试功能:
function pointInside( r, p ) {
var result =
( p.x >= r.location.x - r.size.width * 0.5 ) &&
( p.x <= r.location.x + r.size.width * 0.5 ) &&
( p.y >= r.location.y - r.size.height * 0.5 ) &&
( p.y <= r.location.y + r.size.height * 0.5 )
;
return result;
}
function test() {
var rect = {};
rect["location"] = { x:6, y:5 };
rect["size"] = { width:10, height:8 };
var p = { x:10, y:8 };
var inside = pointInside( rect, p );
console.log( inside ? "inside" : "outside" );
}
然后将文本“inside”写入控制台。大。现在,如果我将pointInside函数更改为:
function pointInside( r, p ) {
return
( p.x >= r.location.x - r.size.width * 0.5 ) &&
( p.x <= r.location.x + r.size.width * 0.5 ) &&
( p.y >= r.location.y - r.size.height * 0.5 ) &&
( p.y <= r.location.y + r.size.height * 0.5 )
;
}
然后当我调用测试函数时,“outside”被写入控制台。在进一步调查中,我发现pointInside函数实际上是返回undefined。为什么?我看不出pointInside的两个版本之间有任何有意义的区别。任何人都可以向我解释这个吗?
答案 0 :(得分:11)
在javascript中,;
是可选的(在语句末尾)...因此您的函数会返回&#39; undefined&#39; (这是假y)并且该函数中的其余代码实际上被忽略了......很棒不是!!
尝试以下
function pointInside( r, p ) {
return (
( p.x >= r.location.x - r.size.width * 0.5 ) &&
( p.x <= r.location.x + r.size.width * 0.5 ) &&
( p.y >= r.location.y - r.size.height * 0.5 ) &&
( p.y <= r.location.y + r.size.height * 0.5 )
);
}
它可能永远不会被修复,这种愚蠢的行为,因为它会破坏太多(差)代码
答案 1 :(得分:8)
不幸的是,许多javascript口译员试图原谅丢失的分号。如果你有“返回”然后是行尾,许多口译员都会认为你忘记了分号。因此,你的“未定义”。