javascript 变量作用域浅析

js中的变量作用域

重要法则:
1.不存在块级作用域,即 代码块不会创建新的作用域
2.遵循词法作用域,即 函数在定义它们的作用域里运行,而不是在执行它们的作用域里运行

示例代码:
var x=1;
function f1(){
alert(x);
if(true){
var x=10;
}
alert(x);
}
f1();
alert(x);

结果:undefined 10 1
解释:
1.由于代码块不会创建新的作用域,所以if语句中的var x创建的x变量的作用域不是if语句的代码块,而是函数f1中。
2.由于遵循词法作用域,所以x变量的作用域在定义它的作用域里,它在函数f1中定义,所以它的作用域就是f1,而不是在执行f1的作用域里(全局作用域)。
因此,由于在if代码块中申明了x变量,而代码块不会创建新的作用域,所以这个x变量的作用域是整个f1,所以在执行第一个alert(x)的时候,这个x的作用域实际上是f1中(定义它的作用域里),而不是全局变量中的x(而不是执行它的作用域里),所以此时x还没有被赋值,因此输出undefined;第二个alert(x),已经被赋值为10;f1()执行完毕后,f1作用域里的x被回收,再执行alert(x)时,这个x的作用域为全局作用域(定义它的作用域,此时执行它的作用域和定义它的作用域是一致的,都是全局作用域),即1.

简单一点看就是,只要在函数里定义了变量,都把他们的声明提到函数的最前面来,然后函数里的变量覆盖了全局变量,因此上面的代码我们可以看成是这样的:
var x=1;
function f1(){
var x;
alert(x);
if(true){
x=10;
}
alert(x);
}
f1();
alert(x);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值