Javascript 为什么这个变量的值没有定义
我目前正在学习javascript,遇到了这个例子Javascript 为什么这个变量的值没有定义,javascript,Javascript,我目前正在学习javascript,遇到了这个例子 var t = function() { this.name = "Jam"; no = "123"; } console.log(t.no); //Undefined var m = new t(); console.log(m.name); 为什么第一个语句没有定义?因为t是一个函数,它将由t()执行no是一个全局Scooted变量,从任何地方都可以访问该变量而无需前缀。t是一个函数对象。与任何其他对象一样,该函数可能具有指定
var t = function()
{
this.name = "Jam";
no = "123";
}
console.log(t.no); //Undefined
var m = new t();
console.log(m.name);
为什么第一个语句没有定义?因为
t
是一个函数,它将由t()执行代码><另一方面,code>no
是一个全局Scooted变量,从任何地方都可以访问该变量而无需前缀。t
是一个函数对象。与任何其他对象一样,该函数可能具有指定的属性。因此,为了使您的代码正常工作,您应将“123”
分配给函数的no
属性(A行):
t
是一个函数表达式。您可以访问函数的返回对象,如t()。否
,或者您可以使用函数作为构造函数创建新对象,如下所示
myT = new t()
console.log(t.no);
但是no
变量只是函数中的一个全局变量,它不是它返回的内容的一部分,也不是附加到构造函数的返回对象
这是一个非常好的教程,涵盖了所有这些主题的深度
为什么第一个语句没有定义
因为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
是函数,而不是对象。@BlazeSahlzen-函数是对象。@nnnn我应该更具体一些。我想说的是,为了访问函数
t
的属性,您需要实例化它(即,将它转换为对象
)。不,t
已经是一个可以拥有自己属性的对象,而无需实例化任何其他对象t.no=“123”
在t
本身上创建一个属性(OP试图在不创建的情况下访问这样的属性)。@nnnnnn哦,好的,谢谢。我误解了这个问题。“另一方面,no
是一个内部变量”从示例中可以看出,no
是一个隐式全局变量,因为缺少var
、let
或const
关键字。我实际上意识到情况更糟。”no'不是前面带有“var”的声明,因此它现在是一个全局变量。永远不要那样做,否则坏事就会发生@ZZBOV是,否不是t的一部分。正如我在自己的回答中所评论的,no实际上不是私有的,而是全局范围的。。错误的代码可能很难阅读:)“您的no
变量只是一个私有变量”-该变量是全局变量(因为它不是用var
声明的)。
var no = 21;
function foo() {
no = 42;
}
console.log(no); // 21
foo();
console.log(no); // 42