为什么这个变量的值没有定义

Why is the value of this variable undefined

本文关键字:定义 变量 为什么      更新时间:2023-09-26

我目前正在学习javascript,并遇到了这个示例

var t = function()
{
  this.name = "Jam";
  no = "123";
}
console.log(t.no); //Undefined 
var m = new t();
console.log(m.name);

为什么第一个语句未定义?

t是一个函数对象。与任何其他对象一样,函数也可以指定属性。因此,为了使代码工作,您应该将"123"分配给函数的no属性(A行):

var t = function()
{
  this.name = "Jam";
}
t.no = "123"; // line A
console.log(t.no); // "123"
var m = new t();
console.log(m.name);

为什么第一个语句未定义?

因为t没有属性no

首先,代码内部的功能,即

this.name = "Jam";
no = "123";

仅当函数被调用时才执行。您正在使用var m = new t();执行此操作,它位于console.log(t.no);之后

其次,no = "123";不会在函数对象上创建属性。它将尝试设置变量no的值。由于该变量在您的示例中不存在,所以这一行将创建全局变量no,或者在代码处于严格模式时出错。

考虑以下示例:

var no = 21;
function foo() {
  no = 42;
}
console.log(no); // 21
foo();
console.log(no); // 42

因为t是一个函数,它将由t();执行。另一方面,no是一个全局scooed变量,它可以在没有前缀的情况下从任何地方到达。

t是一个函数表达式。您可以访问像t().no这样的函数的返回对象,也可以使用该函数作为像这样的构造函数来创建一个新对象

myT = new t()
console.log(t.no);

但是no变量只是函数内部的全局变量,它不是它返回的内容的一部分,也没有附加到构造函数的返回对象。

这里有一个非常好的教程,它深入地涵盖了所有这些主题。