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我知道它应该做什么,我希望它能做到这一点,但在声明内部函数时,有没有什么跨浏览器的怪癖或副作用值得注意呢?
编辑
通过安全,我的意思是,它们是否可能污染全局名称空间,或者不被视为声明它们的函数的本地。
/Edit
发布于 2011-01-24 18:11:38
Afaik编号IE在命名函数表达式方面存在问题,例如:
var inner = function inner2() {
}但其他一切都应该没问题。
发布于 2011-01-24 18:12:33
这是常规的ECMAScript语法。它允许闭包和“内部函数”。函数内的语句(函数声明和变量)的作用域在该函数内。
在您的示例中,函数inner只存在于outer的作用域中;除了尝试调用inner()时的引用错误之外,其他任何错误都应该被视为“怪癖”。
更新: Found a question可能与此相关。
发布于 2011-01-24 18:14:42
我不明白你说的“安全”是什么意思。在您的示例中,无法从outer()外部调用inner()。如果“安全”-意味着只有函数可见性,那么你的是对的,它是安全的。
https://stackoverflow.com/questions/4780769
复制相似问题