为什么变量定义的全局是未定义的? [英] Why a variable defined global is undefined?
问题描述
为什么
myname
undefined
而不是字符串global
?
var myname =global; //全局变量
函数func(){
alert(myname); //undefined
var myname =local;
alert(myname); //本地
}
func();
不可能引用在该函数范围外定义的外部变量吗?并在这个全局变量...
我怎样才能解决这个问题,所以我没有得到 undefined
从一个全局变量?
你刚刚偶然发现了一个叫做hoisting的js功能
var myname =global; //全局变量
函数func(){
alert(myname); //undefined
var myname =local;
alert(myname); //本地
}
func();
在定义 func
时,编译器查看函数体。它看到您正在声明一个名为 myname
的变量。
Javascript 通过将声明移动到函数的顶部来提升 变量和函数声明。
因为吊起你的代码被重写为以下内容。
var myname =global; //全局变量
函数func(){
var myname; //声明局部变量并将其赋值undefined
alert(myname); //undefined
myname =local; //将本地var myname分配给本地
alert(myname); //本地
}
func();
这个覆盖全局变量。如果你想访问函数范围内的全局变量,可以使用 this
关键字。
var myname =global; //全局变量
函数func(){
var myname =local;
alert(this.myname); //全局
alert(myname); //本地
}
func();
请注意,这只适用于调用函数而不是方法或构造函数,因为
如果您想在任何上下文中访问全局变量而不考虑函数类型,则声明一个通常不会涵盖的全局变量。
var global = this; //在全球范围内。
var myname =global;
var obj = {f:function(){
var myname =local;
console.log(global.myname);
}};
obj.f(); //global
请注意,这是在方法位置, this
关键字直接指向obj,因此没有定义myname。
Hi guys here I have a simple function and a global variable.
Why is
myname
undefined
and not the string"global"
?
var myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
Is not possible to refer to a outer variable that is define outside the scope of that function? and in this a global variable...
And how I can fix this so I don't get a undefined
from a global variable?
You have just stumbled on a js "feature" called hoisting
var myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
In this code when you define func
the compiler looks at the function body. It sees that you are declaring a variable called myname
.
Javascript Hoists variable and function declarations, by moving the declaration to the top of the function.
Because of hoisting your code is rewritten to the following.
var myname = "global"; // global variable
function func() {
var myname; //declare local variable and assign it undefined
alert(myname); // "undefined"
myname = "local"; // assign local var myname to "local"
alert(myname); // "local"
}
func();
This "Covers" the global variable. If you want access to the global variable within the scope of a function use the this
keyword.
var myname = "global"; // global variable
function func() {
var myname = "local";
alert(this.myname); // "global"
alert(myname); // "local"
}
func();
Note that this only works in calling a function not a method or constructor because the this
keyword changes what its bound to based on how you call a function.
EDIT: For completeness
If you want to get access to global variables in any context regardless of function type then declare a global variable that by convention you never cover.
var global = this; // in global scope.
var myname = "global";
var obj = {f: function () {
var myname = "local";
console.log(global.myname);
}};
obj.f(); // "global"
Note that this is in method position and the this
keyword refers to obj directly and therefore doesn't have myname defined.
这篇关于为什么变量定义的全局是未定义的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!