使用 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 - 在 for 循环中使用 let 和 var 关键字声明迭代变量有啥区别? [复制]