Javascript 将属性添加到对象,定义它并立即记录它,将返回未定义的属性

Javascript 将属性添加到对象,定义它并立即记录它,将返回未定义的属性,javascript,Javascript,为什么立即调用对象中新添加的属性会返回“undefined”?完成编译和运行过程会很好。示例行3 console.log: function foo(baz) { this.baz = "baz"; console.log(baz); //why does this print undefined? } var baz = new foo(); 因为您需要使用this.baz来访问前面添加的变量 此在foo()中指的是foo函数。但是,当您登录baz时,它将在窗口(全局)对象

为什么立即调用对象中新添加的属性会返回“undefined”?完成编译和运行过程会很好。示例行3 console.log:

function foo(baz) {
    this.baz = "baz";
    console.log(baz); //why does this print undefined?
}

var baz = new foo();

因为您需要使用
this.baz
来访问前面添加的变量

foo()
中指的是
foo
函数。但是,当您登录
baz
时,它将在
窗口
(全局)对象上进行搜索,因为它没有在
foo()
中定义

因此,你的陈述如下:

console.log(window.baz);
由于未定义
baz
,因此将记录
未定义的

演示

函数foo(){
this.baz=“baz”;
警惕(this.baz);
}

var baz=newfoo()这个.baz
。您已经声明了
foo
的属性,而不是全局变量对不起,我忘了添加参数。我编辑了这本书question@Nazerke在回答中检查更新是的,我们没有通过任何测试。但是我们不是在函数的第一行定义它吗?@Nazerke在答案的第一部分已经回答了这个问题<代码>因为您需要使用this.baz访问前面添加的变量。foo()中的这个函数引用了foo函数。但是,当您登录baz时,它将在窗口(全局)对象上进行搜索,因为它没有在foo()中定义。
foo中的这一点并不是指函数本身,而是指通过构造函数调用创建的对象。我的问题源于与词汇范围相关的混乱。在我的理解中,任何内部函数都必须首先在函数范围内搜索,然后,如果没有找到,就出去搜索全局范围。在这种情况下,我们首先在函数中查找baz,我们应该看到它在那里,而不是“出去”到全局范围。