Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从javascript中的其他函数执行另一个函数_Javascript - Fatal编程技术网

从javascript中的其他函数执行另一个函数

从javascript中的其他函数执行另一个函数,javascript,Javascript,嘿,伙计们,在运行另一个函数时,我有点困惑。我尝试的是: var a = (function() { var babe = function() { console.log('yay'); }; })(); 当我运行像a.babe()这样的代码时,它会给我像TypeError:cannotreadproperty'babe'of undefined这样的错误。为什么会这样 我想从a调用函数babe。。。我怎么做? 我希望你们能帮我 提前感谢。babe是该代码中I

嘿,伙计们,在运行另一个函数时,我有点困惑。我尝试的是:

var a = (function() {
    var babe = function() {
        console.log('yay');
    };
})();
当我运行像
a.babe()
这样的代码时,它会给我像
TypeError:cannotreadproperty'babe'of undefined
这样的错误。为什么会这样

我想从
a
调用函数
babe
。。。我怎么做? 我希望你们能帮我


提前感谢。

babe
是该代码中IIFE的局部变量。它没有被退回。它不是任何东西的财产。它无法访问

如果你想让它从函数外部调用它,你必须公开它




您正在创建一个名为
babe
的函数,并且它只停留在围绕它的立即调用函数表达式(IIFE)的范围内。由于您没有向调用者返回任何内容,默认情况下,函数调用将被计算为
undefined
,并存储在
a
中。这就是为什么你会出错

TypeError:无法读取未定义的属性“babe”
这意味着,您正试图访问
未定义的
值上名为
babe
的属性。在这种情况下,
a
未定义的

与所有这些不同的是,您可以简单地从IIFE返回
babe
函数,将其包装在一个对象中,如下所示

var a = (function() {
    return {
        babe: function() {
            console.log('yay');
        }
    };
})()
a.babe();
现在,返回的对象被分配给
a
,您可以像这样调用
babe
函数

var a = (function() {
    return {
        babe: function() {
            console.log('yay');
        }
    };
})()
a.babe();

为什么要创建一个自动执行函数?您要做的是使函数
babe
成为对象的一部分
a
为此,只需执行以下操作:

var a={
babe:function(){document.write('yay');}
}

a、 宝贝()要使用代码,必须执行以下操作

var a = (function() {
  var babe = function() { console.log('yay'); } 
  return babe
})();

a();

要使其成为
a.babe()
请查看@thefourtheye或@Quentin。

点语法用于访问对象的“属性”。因此,在一个简单的示例中,您可以使用如下内容:

var a = {
  babe: function(){ console.log('yay') }
};

a.babe(); // yay
在本例中,如果要创建闭包以从全局范围隐藏其他变量和函数,则必须返回一个对象,然后将该对象分配给
a

var a = (function() {
    return {
        babe: function(){ console.log('yay') }
    }
})();

a.babe(); // yay
只要记住,无论何时使用点,前面的变量必须是一个对象