问题描述
考虑以下代码:
(function a() {
// Nested function
function b() {
console.log("Works!");
}
b();
})();
此代码有效,但如果名称在字符串内(即动态),则在理论上可以调用 b()
吗?
This code works, but would it be possible (in theory) to call b()
if the name is inside a string (i.e. dynamic)?
如果在全局范围内声明 b()
,我们可以使用 window [stringContainingName]();
.在这种情况下有可能吗?
If b()
would be declared in the global scope, we could use window[stringContainingName]();
. Is there a possibility in this case?
这只是一个理论问题!我知道这样的代码设计不好.
推荐答案
不,函数声明具有相同的作用域规则,因此即使从理论上讲也是不可能的(当然,除非我们谈论闭包).
No, function declaration has the same rules for scope, so it's not possible even in theory (unless we talk about closures, of course).
是的,当然:这个...
Yes, of course: this...
(function a() {
// Nested function
window.b = function() {
console.log("Works!");
}
b();
})();
b(); // or window['b'](), or window.b()
...将两次记录'Works'
.我在这里使用了显式的全局对象,就像在严格模式下直接声明给 b
而不声明它一样(使用 b = function()...
而不是 window.b = function()...
)将导致ReferenceError.
... will log 'Works'
twice. I used explicit global object here, as in the strict mode direct assignment to b
without declaring it (using b = function() ...
instead of window.b = function() ...
) will cause ReferenceError.
这篇关于用动态名称调用嵌套函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!