入门 - 变量作用域 ¶
作者:KK
发表日期:2016.2.20
代码中声明的变量是有作用范围的,超出范围就不起作用了,这个术语称为作用域
(你理解为作用区域就是咯)
一般就是函数外面不能使用函数里面的变量,比如:
var age = 222;
function test(){
var age = 777;
alert(age);
}
alert(age);
输出222,因为这是使用外面的age变量,无法使用函数里面的age变量;并且注意,函数只是一个定义,并没有任何代码去调用这个函数,所以函数里声明变量和alert都不会执行
所以这个函数里面定义了什么什么变量关外面什么事呀对吧
而函数也是的,可以在一个函数里面定义另一个函数,但是里面的函数一般不能被外面调用
function aa(){
alert('这里是aa函数');
function bb(){
alert('这里是aa的bb函数');
}
bb();
}
bb(); //无效,因为bb函数的作用域是aa函数区域内,除非你改成调用aa函数,靠aa函数来调用bb
但是函数里面可以使用外面的变量 ¶
function test(){
alert(age);
}
var age = 999;
test();
因为当函数在自己的函数体找不到变量时,就会自动往外面找变量
另外上面例子中把函数放在最顶上是告诉你,函数的定义放在哪个位置无所谓,重点是它什么时候被调用执行
函数也是一样,你始终都可以认为函数都是一种变量,所以里面的函数总是可以调用外面的函数的,包括上面小节中bb函数也可以调用alert呀
全局作用域 ¶
当一个变量/函数可以在任何位置都被访问调用的时候,它就是一个全局变量/全局函数,比如alert函数就是一个全局函数
JS里预先设置了好多全局函数,包括alert,confirm,prompt,parseInt,Number,isNaN,typeof等等根本就是数不清
我们也可以自己创建全局变量和全局函数,其实我们也已经创建过很多次
当一个变量在声明时没有被任何函数包住的时候,它就是一个全局变量,否则就是局部变量
<script>
var a = 123; //声明时没有被任何函数包住,所以是全局变量
function xxx(){ //而函数定义时也没有被其它任何函数包住,所以这个也是全局函数,可以被任何地方调用
var b; //声明时被xxx函数包住了,所以这个是局部变量,一旦离开xxx函数体就不是它的天下了,外面也访问不了它
alert(a); //访问全局变量a,成功提示123
}
xxx();
alert(b); //如果在全局区域尝试访问xxx函数里面的局部变量b就会导致脚本引擎出错,不会出现提示
</script>
全局的东西可以跨标签访问,而不是只能在一个标签里到处调用:
<script>
var a = 111;
function b(){
alert('函数b');
}
</script>
<script>
alert(a); //调用上一个script标签产生的全局变量a
b(); //不废话了,你懂的
</script>
作用域的坑点 ¶
如果你声明函数时不用var关键字就会被坑,代码会出现问题的
至于具体嘛,后面学到window对象这个章节的时候再说吧,一般人我不告诉他
前面也提醒过你了,听我的就是,只要你创建变量,都加上var关键字准没错儿