Javascript 意外结果:为什么访问未定义的变量不会引发错误?
为什么它会提醒Javascript 意外结果:为什么访问未定义的变量不会引发错误?,javascript,Javascript,为什么它会提醒”,而不是在名称前面抛出一个没有此的错误?名称在函数的作用域和父函数(窗口)中都没有定义(由您定义)。要引用对象本身,必须使用this: var a = { name: 'zhangsan', getName: function() { alert(name) } }; a.getName(); PS:显然确实存在,并且代码中的name引用了它,因此没有抛出错误,而是返回了一个不正确的值。name没有(由您)在函数的范围和父函数(窗口)中定
”
,而不是在名称前面抛出一个没有此的错误?名称在函数的作用域和父函数(窗口)中都没有定义(由您定义)。要引用对象本身,必须使用this
:
var a = {
name: 'zhangsan',
getName: function() {
alert(name)
}
};
a.getName();
PS:显然确实存在,并且代码中的name
引用了它,因此没有抛出错误,而是返回了一个不正确的值。name
没有(由您)在函数的范围和父函数(窗口
)中定义。要引用对象本身,必须使用this
:
var a = {
name: 'zhangsan',
getName: function() {
alert(name)
}
};
a.getName();
PS:显然确实存在,并且代码中的name
引用了它,因此没有抛出错误,而是返回了错误的值。窗口对象上有一个名为name的属性,默认值为“”窗口对象上有一个名为name的属性,默认值为“”这很容易理解:
var a = {
name: 'zhangsan',
getName: function() {
alert(this.name);
}
};
a.getName();
您可以在这里尝试:这很容易理解:
var a = {
name: 'zhangsan',
getName: function() {
alert(this.name);
}
};
a.getName();
您可以在此处尝试:在您的函数中,您没有使用引用对象本身的this
这样做:
var name = "asdasdasd";
var a = {name: 'zhangsan', getName: function() {
alert("A name : " + name);
alert("A this.name : " + this.name);
}};
var b = {name: 'BBBBasfdasdasd', getName: function() {
alert("B name : " + name);
alert("B this.name : " + this.name);
}};
a.getName();
b.getName();
另外,我认为您已经有了一个全局变量名,其值为”
,否则您应该在函数中得到ReferenceError
,您没有使用引用对象本身的this
这样做:
var name = "asdasdasd";
var a = {name: 'zhangsan', getName: function() {
alert("A name : " + name);
alert("A this.name : " + this.name);
}};
var b = {name: 'BBBBasfdasdasd', getName: function() {
alert("B name : " + name);
alert("B this.name : " + this.name);
}};
a.getName();
b.getName();
另外,我认为您已经有了一个全局变量名,其值为”
,否则您应该得到ReferenceError
,因为在这一行中:
var a = {name: 'zhangsan', getName: function() {
alert(this.name)}
};
a.getName();
…name
是一个简单的变量引用。在这种情况下,它解析为全局变量name
(窗口的名称,因为全局变量是全局对象的属性,而浏览器上的全局对象是窗口)
要使用对象的name
属性,必须明确执行以下操作:
alert(name);
因为在这一行:
var a = {name: 'zhangsan', getName: function() {
alert(this.name)}
};
a.getName();
…name
是一个简单的变量引用。在这种情况下,它解析为全局变量name
(窗口的名称,因为全局变量是全局对象的属性,而浏览器上的全局对象是窗口)
要使用对象的name
属性,必须明确执行以下操作:
alert(name);
因为函数的作用域中没有名为name
的变量。请尝试alert(this.name)
在这种情况下,它应该返回一个错误,但它返回“”。name
指的是window.name
,因此不会引发错误@费利克斯克林:我忘了窗口.名称
。这就可以解释了。因为函数的作用域中没有名为name
的变量。请尝试alert(this.name)
在这种情况下,它应该返回一个错误,但它返回“”。name
指的是window.name
,因此不会引发错误@费利克斯克林:我忘了窗口.名称
。这就解释了。实际上,window.name
存在;)否则代码将抛出一个引用错误。@FelixKling-完全忘记了!实际上,window.name
存在;)否则代码将抛出一个引用错误。@FelixKling-完全忘记了!是的,更新了。在达到200个上限后,我的头脑不正常:)是的,更新了。在达到200上限后,我的头脑不正常:)非常感谢,我现在明白了。非常感谢,我现在明白了。我不明白这与问题有什么关系。他想知道为什么访问似乎是未声明的变量时没有抛出错误。通常这会导致引用错误。我不明白这与问题有什么关系。他想知道为什么访问似乎是未声明的变量时没有抛出错误。通常,这将导致引用错误,。