[英]global and local variable execution context in javascript
为了理解javascript的基本原理,我遇到了以下代码,名为“ foo”的变量的期望值将为7和5,但是结果为7和7。不知道为什么。...
var foo = 5;
(function Test() {
foo = 7;
console.log("foo=" + foo);
})();
console.log("foo=" + foo);
foo=7
foo=7
因为当你做foo = 7;
它会创建一个全局变量并将其设置为7
,即使函数完成后仍为7
。 您可能希望它是一个局部变量:
(function Test() {
var foo = 7;
console.log("foo=" + foo);
})();
要获得7和5,您需要在“ foo = 7;”之前放置“ var”。 为了防止它覆盖您在函数外部声明的全局foo,请使用该函数。
也就是说,在函数内声明变量时需要使用var,以使它们在本地范围内作用于函数。
您先声明一个全局变量,然后在函数中引用它。 如果需要局部变量,请使用var
关键字在函数内部声明它。
//foo variable definition here
var foo = 5;
(function Test() {
//Referencing the already globally defined var.
//Use var foo = 7 in order to define a new local var.
foo = 7;
console.log("foo=" + foo);
})();
console.log("foo=" + foo);
在立即调用的匿名方法中引用全局变量并不意味着它会覆盖全局范围内的变量!
只有当当前作用域中没有其他foo
可以访问时,诸如foo=7
类的东西才会创建一个新变量。 在这种情况下存在!
立即调用匿名函数不是一个完全隔离的范围。 作为功能,它具有局部作用域,该局部作用域在块外不可用。 但是它仍然可以进入全球范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.