Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当JavaScript中存在同名的全局方法时,为什么总是调用私有方法?_Javascript_Private Methods_Global Methods - Fatal编程技术网

当JavaScript中存在同名的全局方法时,为什么总是调用私有方法?

当JavaScript中存在同名的全局方法时,为什么总是调用私有方法?,javascript,private-methods,global-methods,Javascript,Private Methods,Global Methods,我有一些JavaScript示例代码,如下所示。单击按钮时,始终调用名为doSomething of object xyz的私有方法,即使全局级别存在同名方法。我试图理解JavaScript级别上发生了什么 问题:在这种情况下,为什么总是调用doSomething的私有方法而不是同名的全局方法 函数doSomething(){ 警报(“这是一个可供所有人使用的全局方法”); } var xyz=函数(){ var x={}; x、 FirstName=“迈克”; x、 changeSeat=

我有一些JavaScript示例代码,如下所示。单击按钮时,始终调用名为doSomething of object xyz的私有方法,即使全局级别存在同名方法。我试图理解JavaScript级别上发生了什么

问题:在这种情况下,为什么总是调用doSomething的私有方法而不是同名的全局方法


函数doSomething(){
警报(“这是一个可供所有人使用的全局方法”);
}
var xyz=函数(){
var x={};
x、 FirstName=“迈克”;
x、 changeSeat=函数(){
doSomething();
}
函数doSomething(){
警报(“这是一个私有方法”);
}
返回x;
}();

当存在同名方法时,会调用私有或全局方法?
通过在
xyz
中定义
doSomething
,您可以覆盖
xyz

范围内的全局
doSomething
可以帮助您理解此主题。@31piy,从您所指的文章来看,这是有意义的。由于方法doSomething是从对象xyz内调用的,JavaScript将首先在对象xyz的范围内查找该方法,如果找不到这样的方法,则只有JavaScript才会转到对象xyz外的范围级别。如果内部
doSomething()
是首先定义的。你真正想问的不是范围,而是提升。@Tomalak,首先定义是指在xyz函数体的开头定义的?我试着把它放在xyz函数体的开头,但仍然调用了doSomething的私有方法。或者,我将全局doSomething函数放在自调用xyz函数之后,但即使这样,也会调用私有方法。我没有说代码的行为会有所不同。我只是说,你对它的行为方式并不感到惊讶。这个词是“阴影”。“overwrite”意味着全局变量已更改,而事实并非如此。感谢您的反馈,英语不是我的主要语言。哪个术语更合适?当我写“覆盖[…]范围内”时,我的意思是它不会在全局范围内发生,而只在该范围内发生。全局变量
doSomething
xyz
范围内被同名的局部变量隐藏。其他术语可能是“不可见”或“模糊”(尽管英语也不是我的第一语言)