Javascript 模式表现得很奇怪

标签 javascript design-patterns

foo是一个调用自身的函数,其中有一个函数 bar这也称为它自己。然后我暴露bar 。但为什么它后来说“foo”是undefined

var foo = (function(){
    var bar = (function(t){
        console.log(t);
    })('test 1');

    return bar;
})();

console.log(foo); // output: undefined

更新:

我想做这样的事情:

var foo = (function foo(){
    (function bar(t){
        console.log(t);
    })('test 1');

    return { bar : bar };
})();

foo.bar('test 2');

现在仅此bar不被识别..似乎我无法自行执行一次,但仍将其作为返回值传递..

最佳答案

foo 函数立即调用自身,因此它的返回值被分配给 foo。它返回 bar返回值,因为它也立即调用自身,并且由于 bar 返回 undefinedfoo 也返回 undefined:

// Outer function, immediately invoked
var foo = (function(){

    // Inner function, immediately invoked
    var bar = (function(t){
        console.log(t);
        // Implicitly return undefined
    })('test 1');

    // bar is now === undefined

    return bar;
})();

console.log(foo); // output: undefined

关于Javascript 模式表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16419344/

相关文章:

php - 实例化对象列表的正确方法

c++ - 使用适当的基类指针声明设计接口(interface) - cpp

用于导航的 Javascript 在某些子菜单上工作,但在其他子菜单上不起作用?

design-patterns - 使用空方法的默认实现的设计模式

c - 引用 ANSI C 中的设计模式?

c# - 使用静态工厂是依赖注入(inject)的有效模式吗?

javascript - 我可以通过其单击事件响应列表项中的菜单项吗?

javascript - 如何在两个字符串之间选择文本javascript?

javascript - 如何去除字符串中多余的空格?

javascript - 为什么我的 jQuery 每个循环都没有正确添加值?