函数调用创建的全局变量默认保存为空字符串,应该是未定义的

时间:2017-09-05 11:59:53

标签: javascript undefined

如果一个变量被声明但没有被初始化,它将在控制台中打印undefined。但在这种特殊情况下,如果在Person函数中有console.log(this.name),它应该在我调用时创建一个名为name的全局变量函数。但是全局变量必须是未定义的,而是它保持一个空字符串。我甚至检查了窗口对象。它有一个名为name的属性,它保存空字符串。为什么它的行为是这样的?

function Person(){
    	
        console.log(this.name)
    
    } 
    
    Person() // should prints undefined ,but prints empty string

enter image description here

2 个答案:

答案 0 :(得分:3)

该代码不会创建任何全局变量(Person除外,这是一种变量),它只是尝试使用一。但是如果您在默认的宽松模式下在浏览器中运行它,则会看到一个字符串,因为浏览器具有预定义的name全局:它是运行代码的name of the window。 (如果您在严格模式下运行它,则会因为调用期间thisundefined而收到错误。)

如果您在浏览器上运行而不是,或者使用其他名称(不是全局的名称),那么您将看到undefined。< / p>

答案 1 :(得分:0)

已经在全局对象(浏览器中为name)上存在属性window,这是一个空字符串,否则该值肯定是{{1} }。