JavaScript变量作用域详解
在JavaScript中,变量可以是全局的,也可以是局部的,在讨论全局变量于局部变量时,起使就是在讨论变量的作用域(scope)
全局变量(global variable)可以在脚本中的任何位置被使用,一旦在脚本中定义了全局变量,就可以在任何位置使用它(包括在函数内部),全局变量的作用域是整个脚本。
局部变量(local variable),只存在于声明它的函数内部,在函数外部无法使用。局部变量的作用域仅限于在某个特定的函数内部。
我们在函数里既可以使用,全局变量,也可以使用局部变量。可以使用 var 关键字明确地为函数变量设定作用域。规则如下:
如果在某个函数中,使用了var 来定义变量,那个变量就会被视为局部变量,只存在于函数的上下文中,外部无法使用。反之,若是没有使用var 关键字,那个变量就会被视为全局变量,如果脚本中已经存在一个与之同名的全局变量,这个函数就会改变那个全局变量的值。
例子:
<script type="text/javascript">
function square(num){
total = num * num;//没有使用var关键字来定义
return total;
}
var total = 50;
square(20);
console.log(total);//total 值为400.
</script>
全局变量total 的值变为了400,因为未把这个函数内部的total变量明确的声明未局部变量,这个函数把名字同样是total 的那个全局变量的值也给改变了。
正确示例:
function square(num){
var total = num * num;
console.log(total);
}
square(20);
var total = 50;
console.log(total);//输出结果为50;
现在,全局变量total 变得安全了,在怎么调用square()函数也不会改变它。
所以在函数中定义变量时,要尽量使用var关键字来定义,这样就能避免任何形式的二义性隐患。