如何在Javascript中从外部作用域调用函数?

时间:2014-11-13 17:54:41

标签: javascript function scope

考虑代码:

function foo()
{
    console.log('foo');
}

function bar()
{
    var foo = 5;
    foo(); // (*)
}

如何使(*)引用外部函数而不是局部变量?

2 个答案:

答案 0 :(得分:1)

如果外部范围是全局范围,则可以执行

window.foo(); // assuming you're in a browser

如果没有,那么你运气不好。给局部变量另一个名字。

您运气不好的一个例子:

window.onload = function() {
    function foo()
    {
        console.log('foo');
    }

    function bar()
    {
        var foo = 5;
        foo(); // (*)
    }
}

匿名"加载"的范围处理函数没有名称,也没有任何其他句柄来实现代码的功能" bar"可能表明它想要引用 " foo"而不是当地的。

请注意,Coffeescript明确禁止这一点;它不会允许本地符号隐藏更全局的符号。 (在你跳上Coffeescript火车之前,那是controversial feature of the language。)

答案 1 :(得分:1)

如果您的功能是全局的,您可以使用:

window.foo()

更多信息:http://www.w3schools.com/js/js_function_invocation.asp