return语句是否返回匿名对象?

时间:2018-06-14 01:32:08

标签: javascript



 var dom = function(params, context) {
    return new GetOrMakeDom(params, context);
  };




代码中的return语句是否返回匿名对象?如果是这样的话,"这个" object是唯一有引用它的对象吗?如果没有,还有谁参考了它?



function OuterFunction()
{
    return new newFunction();
};

function newFunction()
{
     if(this === undefined)
     {
       console.log("this is equal to the global window object");
     }else
     {
       console.log("this is not equal to the global window object");
     }
};

OuterFunction();




1 个答案:

答案 0 :(得分:1)

我认为你在这里有些困惑。你得到奇怪的结果,因为你奇怪地使用new运算符。通常它用在构造函数上 - 但是,你的函数并没有像构造函数那样为自己定义任何属性,因此当它返回newFunction“构造函数”的实例时,实例就是一个空的对象。

function OuterFunction() {
    return new newFunction();
};

function newFunction() {
    if (this === window) {
        console.log("this is equal to the global window object");
    } else {
        console.log("this is not equal to the global window object");
    }
};

const test = OuterFunction();
console.log(test);

new运算符导致函数作为构造函数被调用,而this被绑定到新创建的实例。如果您要省略new运算符:

function OuterFunction() {
    return newFunction();
};

function newFunction() {
    if (this === window) {
        console.log("this is equal to the global window object");
    } else {
        console.log("this is not equal to the global window object");
    }
};

const test = OuterFunction();
console.log(test);

您看到this在此实例中引用windowundefined是返回。

另外,我相信你有一些不正确的术语 - “匿名对象”实际上不是我听过的术语。您可能会将此与“匿名函数”混淆,后者是一个没有名称的函数。