如果一个变量被声明但没有被初始化,它将在控制台中打印undefined。但在这种特殊情况下,如果在Person函数中有console.log(this.name)
,它应该在我调用时创建一个名为name
的全局变量函数。但是全局变量必须是未定义的,而是它保持一个空字符串。我甚至检查了窗口对象。它有一个名为name的属性,它保存空字符串。为什么它的行为是这样的?
function Person(){
console.log(this.name)
}
Person() // should prints undefined ,but prints empty string
答案 0 :(得分:3)
该代码不会创建任何全局变量(Person
除外,这是一种变量),它只是尝试使用一。但是如果您在默认的宽松模式下在浏览器中运行它,则会看到一个字符串,因为浏览器具有预定义的name
全局:它是运行代码的name of the window。 (如果您在严格模式下运行它,则会因为调用期间this
为undefined
而收到错误。)
如果您在浏览器上运行而不是,或者使用其他名称(不是全局的名称),那么您将看到undefined
。< / p>
答案 1 :(得分:0)
已经在全局对象(浏览器中为name
)上存在属性window
,这是一个空字符串,否则该值肯定是{{1} }。