J R*_*Rod 20 javascript global-variables local-variables hoisting
嗨,大家好,我有一个简单的函数和一个全局变量.
为什么
mynameundefined不是字符串"global"?
var myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
Run Code Online (Sandbox Code Playgroud)
是不是可以引用在该函数范围之外定义的外部变量?在这个全局变量......
我如何解决这个问题,以便undefined从全局变量中得到一个?
t3d*_*son 42
你刚刚偶然发现了一个名为"吊装"的js"功能"
var myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
Run Code Online (Sandbox Code Playgroud)
在此代码中定义func编译器时查看函数体.它看到你声明一个名为的变量myname.
的Javascript 升降机变量和函数声明,该声明移动到函数的顶部.
由于提升您的代码被重写为以下内容.
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();
Run Code Online (Sandbox Code Playgroud)
这"涵盖"全局变量.如果要在函数范围内访问全局变量,请使用this关键字.
var myname = "global"; // global variable
function func() {
var myname = "local";
alert(this.myname); // "global"
alert(myname); // "local"
}
func();
Run Code Online (Sandbox Code Playgroud)
请注意,这仅适用于调用函数而不是方法或构造函数,因为this关键字根据您调用函数的方式更改其绑定的内容.
编辑:为了完整
如果您想要在任何上下文中访问全局变量而不管函数类型如何,那么声明一个按照惯例从未覆盖的全局变量.
var global = this; // in global scope.
var myname = "global";
var obj = {f: function () {
var myname = "local";
console.log(global.myname);
}};
obj.f(); // "global"
Run Code Online (Sandbox Code Playgroud)
请注意,这是在方法位置,this关键字直接引用obj,因此没有定义myname.
| 归档时间: |
|
| 查看次数: |
28518 次 |
| 最近记录: |