如果我不担心污染全局范围,并且函数b()被调用的唯一地方是函数a(),那么以下哪个是性能方面更好的解决方案?
var v;
function a()
{
function b()
{
v*=v;
}
v=5;
b();
}
a();
或
var v;
function a()
{
v=5;
b();
}
function b()
{
v*=v;
}
a();
答案 0 :(得分:2)
当您使用符号时,会在环境链中查找其关联值,从内部开始并向外移动。这意味着首先找到内部(本地)环境而不是全局环境,但性能没有实际差异。
选择采用哪种解决方案只需问问自己:
如果没有,
答案 1 :(得分:0)
三年后回顾我的问题,我希望提供一个更令人满意的答案。
如果内部功能将在别处使用,请不要嵌套。原因很明显。
function a(){
// ...
}
function b(){
// ...
a();
}
a();
b();
如果内部函数不会在别处使用,请将其嵌套。它看起来更干净,并且增加了外部函数的逻辑完整性(相关内容在视觉上是封闭的)。
function b(){
function a(){
// ...
}
// ...
a();
}
b();
如果内部函数不会在别处使用并且外部函数将被多次调用,则从中调出一个闭包并在封闭范围内定义内部。这样它赢了&# 39;每次通话都要重新定义。当内部函数复杂和/或多次调用外部函数时,这更有意义。
var b = (function b(){
function a(){
// ...
}
return function(){
// ...
a();
};
}());
b();
b();
其他性能影响可以忽略不计。