为什么这个javascript对象具有最简单的构造函数未定义?

时间:2016-02-08 19:41:26

标签: javascript

我在控制台中对此进行了测试:

var toto = (function() {function toto() {}})();
toto

Chrome控制台的结果是

undefined

为什么?我会像往常一样期望构造函数:

function toto() {}

我做了什么语法错误?

2 个答案:

答案 0 :(得分:2)

您忘了返回

var toto = (function() {return function toto() {}})();

返回值是分配给变量的值,如果没有返回语句,则返回的值为 undefined

答案 1 :(得分:2)

如果您运行此代码,我相信这会给您答案。

var noname = (function() {
    function toto() {
         console.log('running toto');
         return 'returning toto';
    }
    console.log(toto());
    return 'no name';
})();
console.log(noname);

答案越长越好。

(function(){})();

这称为IIFE(立即调用的函数表达式),它在创建后立即创建并调用该函数。 你放在其中的内容包含在该函数中。这是在ES5 Javascript中创建私有变量的最佳方法。像所有函数一样,您可以从IIFE返回事物并访问在IIFE外部声明的变量,但不会从外部返回任何内容,同样它会创建一个私有范围。 当您的IIFE返回任何内容时,它将返回默认值undefined。