为什么声明在没有new关键字的情况下运行的变量未定义

时间:2014-02-28 04:36:10

标签: javascript

function myFunc(){
    this.taste = 'yummi';
    console.log(this.taste);
    console.log(typeof this);//logs object
}
var noNewObj = myFunc();
console.log(typeof noNewObj);//logs undefined
在myFunc中,this关键字引用noNewObj的新对象,但在函数外部,变量noNewObj被声明为没有new关键字的函数,不是对象,为什么?

3 个答案:

答案 0 :(得分:3)

noNewObj被分配了调用myFunc()返回值,其为undefined,因为没有给出明确的返回值。

如果您尝试使用myFunc()作为构造函数,则需要使用new关键字,如下所示:

var noNewObj = new myFunc();

另外,如果你的意思是使用myFunc()作为构造函数,你应该用大写字母开头,因为这是一个常见的Javascript约定,表明函数是用{{{ 1}}。

答案 1 :(得分:0)

不,它错了:在myFunc中,this关键字引用了noNewObj的新对象

  

如果未使用新关键字,那么' this'函数内部的变量将引用全局对象。

并且没有分配返回值,因此它记录未定义。

答案 2 :(得分:0)

myFunc不会在noNewObj中放置/返回anthing,   所以它是未定义的

function myFunc(){
    this.taste = 'yummi';
    console.log(this.taste);
    console.log(typeof this);//logs object
    //return something here
}