我是JavaScript的新手,我在本地和全局变量作用域上做了一些练习,以下是我的代码(小提琴):
var myname = "initial"
function c(){
alert(myname);
var myname = "changed";
alert(myname);
}
c();Run Code Online (Sandbox Code Playgroud)
当第一个警报被调用时,它显示myname为未定义.所以我的困惑是为什么我无法访问全局实例,myname如果我没有myname在函数中定义,那么它将正常工作.
我一直在使用Stoyan Stefanov使用面向对象的JavaScript学习Javascript
他提供了一个比较全局和本地范围的示例:
var a = 123;
function f() {
alert(a);
var a = 1;
alert(a);
}
f();
Run Code Online (Sandbox Code Playgroud)
看看这个例子,我预计第一个警报为'123',第二个警报为'1'.瞧,斯托扬说:
您可能希望第一个alert()将显示123(全局变量a的值),第二个将显示1(本地a).不是这种情况.第一个警报将显示"未定义".这是因为在函数内部,局部范围比全局范围更重要.因此局部变量会覆盖具有相同名称的任何全局变量.在第一个alert()时,a尚未定义(因此值未定义),但它仍然存在于本地空间中.
我的解释并不清楚,局部变量如何在第一个警报中覆盖全局变量?任何其他/不同的解释将不胜感激.
在这里,我不明白当我var在函数中使用 before 变量时会发生什么,它给了我不同的输出,并且不使用var也得到了不同的输出
这是一段代码,您可以轻松地弄清楚发生了什么
function value() {
var m = 8; //here i am using var as a datatype
console.log(m)
}
m = 7
console.log(m);
value();
console.log(m);Run Code Online (Sandbox Code Playgroud)
而且当我删除 var 或不使用值函数中的任何数据类型时,我得到了不同的输出,这里是一个代码
function value() {
m = 8; //here i am not using var as a datatype
console.log(m)
}
m = 7
console.log(m);
value();
console.log(m);Run Code Online (Sandbox Code Playgroud)
谁能告诉我发生了什么事吗?谢谢您的宝贵时间
javascript ×3