一个变量的作用域是程序源代码中定义这个变量的区域。全局变量拥有全局作用域,在JavaScript代码中的任何地方都是有定义的。
然而在函数内声明的变量只在函数体内有定义。他们是局部变量,作用域是局部性的。函数参数也是局部变量,他们只在体内有定义。
在函数体内,局部变量的优先级高于同名的全局变量。如果在函数内声明的一个局部变量或函数参数中带有的变量和全局变量重名,
全局就被局部变量所覆盖。
eg:
var a="aaaa";
(function (){
var a="bbb";
console.log(a);
})();
=> 输出 bbbb;
一般的编程语言中,花括号内的每一段代码都具有各自的作用域,在而且变量在声明它们的代码段之外是不可见的。我们称之为块级作用域。
但在JavaScript中,没有块级作用域。取而代之地使用了函数作用域:变量在声明他们的函数体以及这个函数的嵌套的任何函数体内都是可见的。
eg:
(function test(O){
var i=0;
if(typeof O =="object"){
var j=0;
console.log(k); => 0~9
}
console.log(k); =>10}
console.log(j);=> 0
})({});
由上面例子 可知 函数体内声明的变量在函数体内始终是可见的。 这也意味着变量在声明之前 甚至已经可用了,这有个非正式的称为 函数变量声明提前