JavaScript局部和全局变量混淆

JavaScript局部和全局变量混淆,javascript,Javascript,我是JavaScript新手,我在本地和全局变量范围上做了一些实践。以下是我的代码() var myname=“初始” 函数c(){ 警报(我的名字); var myname=“已更改”; 警报(我的名字); } c()它不替换全局变量。正在发生的事情被称为“可变提升”。也就是说,var myname插入到函数的顶部。始终在使用变量之前初始化它们 试试这个: var myname=“initial”; 函数c(){ 警报(我的名字); myname=“已更改”; 警报(我的名字); } c(

我是JavaScript新手,我在本地和全局变量范围上做了一些实践。以下是我的代码()

var myname=“初始”
函数c(){
警报(我的名字);
var myname=“已更改”;
警报(我的名字);
}

c()它不替换全局变量。正在发生的事情被称为“可变提升”。也就是说,
var myname插入到函数的顶部。始终在使用变量之前初始化它们

试试这个:

var myname=“initial”;
函数c(){
警报(我的名字);
myname=“已更改”;
警报(我的名字);
}

c()在JavaScript中,变量声明会自动移动到函数的顶部。因此,解释器会使它看起来更像这样:

var myname=“初始”
函数c(){
var myname;
//警报未定义
警报(我的名字);
myname=“已更改”;
//警报已更改
警报(我的名字);
}

c()如果您发出警报(window.myname);然后你会得到values@dholakiyaankit我尝试过使用window.myname,但仍然是未定义…@BharatSoni window.myname在我的浏览器中工作。它应该可以工作bharatvar myname=“initial”不是全局变量。它只能从javascript所在的当前范围访问。如果您想声明一个全局变量,请在不使用“var”关键字的情况下执行该操作,并且该变量应该是窗口对象中的一个属性。先生,我不仅仅是想更改该值。。您正在做的是更改全局变量本身的值。。我想了解“为什么”这一概念……这解决了未定义警报的问题,但它消除了任何局部变量,因为它只使用全局变量
myname
。它不能替换全局变量。正在发生的事情被称为“可变提升”。即myname var myname;在函数的顶部插入。在使用变量之前,请始终初始化变量。我已经理解了,您可以引用它,所以现在有一种方法可以访问与局部变量同名的全局变量??您应该能够通过执行
window.myname
来访问它。请看这里:但是全局变量通常不被认为是一个好的实践,在大多数情况下,最好定义一个全局对象并通过它访问它。i、 e.
var me={myname:“initial”}
然后在函数中调用
me.myname
。说变量声明移到顶部是不正确的。例如,如果在第10行中写入了var myname=“initial”,我们看到的结果与第1行中的var myname=“initial”不同,但实际上我们看到的行为就像var myname在第1行中一样,在第10行中,它也是赋值的,即myname=“initial”,请注意,在函数外部使用
var myVariable
不会自动使其成为全局变量。通常声明
myVariable
时前面没有任何内容会使其成为全局变量(除非它在函数前面已经确定了作用域/设置了),但这样做时最好使用
窗口。
。再说一次,尽可能避免使用全局变量:P