内部函数声明是否安全?

时间:2011-01-24 10:08:39

标签: javascript cross-browser

function outer(x) {
    function inner(y) {
        if (y) console.log(y);
        else console.log(42);
    }
    inner(x + 1);
}
outer(5); // expect a logging of '6'
inner(); // expect a Reference Error

我知道它应该做什么,我希望它能做到这一点,但在宣布内部功能时,我是否应该注意任何跨浏览器的怪癖或副作用。

[编辑]

安全我的意思是它们可能污染全局命名空间,或者不被视为声明它们的函数的本地。

[/编辑]

3 个答案:

答案 0 :(得分:1)

Afaik没有。 IE有命名函数表达式的问题,如:

var inner = function inner2() {

}

但其他一切都应该没问题。

答案 1 :(得分:0)

这是常规的ECMAScript语法。它允许闭包和“内部功能”。函数中的语句(函数声明和 var )在该函数中作用域。

在您的示例中,函数inner仅存在于outer的范围内;尝试呼叫inner()时,除了参考错误之外的任何内容都应被视为“怪癖”。


更新: Found a question可能与此相关。

答案 2 :(得分:0)

我不确定你的意思是“安全”。 在您的示例中,无法从inner()之外调用outer()。如果“安全” - 意味着只有功能可见性,那么你是对的,这是安全的。