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
我知道它应该做什么,我希望它能做到这一点,但在宣布内部功能时,我是否应该注意任何跨浏览器的怪癖或副作用。
[编辑]
安全我的意思是它们可能污染全局命名空间,或者不被视为声明它们的函数的本地。
[/编辑]
答案 0 :(得分:1)
Afaik没有。 IE有命名函数表达式的问题,如:
var inner = function inner2() {
}
但其他一切都应该没问题。
答案 1 :(得分:0)
这是常规的ECMAScript语法。它允许闭包和“内部功能”。函数中的语句(函数声明和 var )在该函数中作用域。
在您的示例中,函数inner
仅存在于outer
的范围内;尝试呼叫inner()
时,除了参考错误之外的任何内容都应被视为“怪癖”。
更新: Found a question可能与此相关。
答案 2 :(得分:0)
我不确定你的意思是“安全”。
在您的示例中,无法从inner()
之外调用outer()
。如果“安全” - 意味着只有功能可见性,那么你是对的,这是安全的。