全局域变量在局部可见,局部变量在全局不可见
varglobal_value = 'global value';
func();
console.log(local_value);
functionfunc(){
varlocal_value = 'local_value';
console.log(global_value);
} 输出: 1.global value 2.Uncaught ReferenceError: local_value is not defined anonymous function 所以,局部域可以修改全局域变量的值varglobal_value = 'global value';
func();
console.log(global_value);
functionfunc(){
global_value = 'local_value';
console.log(global_value);
} 输出: 1.local_value 2.local_value 上面的例子可作为javascript作用域链scope chain的例证 更多scope chain的内容可参考javascript:the definitive guide 深入理解变量作用域一节
局部域重复声明覆盖全局域
varglobal_value = 'global value';
func();
console.log(global_value);
functionfunc(){
varglobal_value = 'local_value';
console.log(global_value);
} 输出: 1.local_value 2.global_value 此例可作为javascript作用域链scope chain的例证
块级作用域无效 即如if语句中声明的变量在if语句外可见 func();
functionfunc(){
console.log(inner_value);
if(true){
varinner_value = 'inner_value';
}
console.log(inner_value);
}
输出: 1.undefined 2.inner_value undefined指声明了但未定义,可能是定义的相关语句在后面的缘故
隐式声明默认实现为全局变量,拥有全局作用域 即使在局部域中声明也是实现为全局域变量 func();
console.log(inner_value);
functionfunc(){
inner_value = 'inner_value';
console.log(inner_value);
}