Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这个变量的值没有定义_Javascript - Fatal编程技术网

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是一个函数对象。与任何其他对象一样,该函数可能具有指定

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

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