使用 var 关键字在 Javascript 中创建对象时遇到问题

Posted

技术标签:

【中文标题】使用 var 关键字在 Javascript 中创建对象时遇到问题【英文标题】:Trouble with creating an object in Javascript with the var keyword 【发布时间】:2014-03-04 06:35:53 【问题描述】:

您好,我在用 javascript 创建对象时遇到问题。 当我在 Chrome 中使用控制台时,我发现了一些奇怪的东西:

function person()this.Name = "John";
var a = new person()

结果: undefined

但如果我这样做

b = new person()

结果: Person Name: "John"

在javascript中创建对象时使用var关键字和不使用有什么区别吗?

【问题讨论】:

在这里工作正常jsbin.com/nilef/1/edit。省略 var 会创建一个全局变量。 该问题与What is the function of the var keyword in ECMAScript 262 3rd Edition/Javascript 1.5? 重复。奇怪之处仅来自 Chrome 控制台显示(或不显示)的内容。 var 语句没有结果值,而赋值表达式有。 【参考方案1】:

查看a的值,其实和b一样。 undefined 只是表达式var a = new person() 的求值结果。

【讨论】:

但是当我做 a.Name 时我无法访问 a.Name【参考方案2】:

在函数内部,所有未声明的变量都是全局的。只有那些用 var 声明的才是本地的。 因此,就范围而言,是的,它有所不同。 如果您在函数内部分配值并在外部打印,则说明您的情况。

【讨论】:

【参考方案3】:

对于没有明确return 值的任何语句,Chrome 会返回 undefined。

例如

var j = "Jenny from the block";

返回

未定义

要完全运行您的代码,请尝试

function person()this.Name = "John";
var a = new person();
console.log(a.Name);

【讨论】:

你不需要return,任何表达式语句都可以。【参考方案4】:

这就是浏览器控制台的工作方式。它返回您执行的任何内容的返回值。在这种情况下,您的语句返回未定义。由于控制台在窗口范围内运行,因此没有范围问题。发生在 Firefox 和 chrome 中。

Console returns undefined

【讨论】:

以上是关于使用 var 关键字在 Javascript 中创建对象时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

javascript的Array对象解析

JavaScript中var关键字的使用详解

JavaScript - 在 for 循环中使用 let 和 var 关键字声明迭代变量有啥区别? [复制]

如何在 Javascript 中创建查询参数?

[基础]JavaScript中对var/let/const的理解和总结

html--前端JavaScript基本内容