// 作用域 : 变量的有效使用范围;
// 变量在哪里可以使用,这个就是作用域需要了解的核心问题;
// JS的作用域其实很好理解 : 只有一种作用域就是函数作用域;
// 函数的大括号括起来的区域就是一个作用域;
function foo(){
var a = 10 ;
console.log( a );
}
// 1. 在作用域之中声明的变量只能在这个作用域之中使用,其他位置是访问不到的;
// 2. 作用之中也存在声明提升特性;
foo();
console.log( a );
// 1. 变量访问规则 :
// 当我们使用变量的时候,这个变量访问会在距离变量访问最近的作用域之中进行查找,查看是否有我们要访问的变量;
// 如果有 : 直接出访问结果;
// 如果没有 : 向外层作用域查找 , 直到查找到全局作用域为止如果还没有找到对应的变量则直接报错 : 引用错误 ;
var a = 10;
function foo(){
var b = 20;
console.log( a );
}
foo();
console.log( b );
// - 作用域分成两种 :
// 1. 全局作用 (没有被函数大括号包裹的地方就是全局作用域)
// 2. 局部作用域 (被函数大括号包裹的地方)
// - 访问变量最大的范围是全局作用域,找到全局作用域之后就不会再继续向上查找了;
var a = 10;
function foo(){
var a = 20;
console.log( a );
}
foo();
// 形参和局部变量是一致的概念;
var a = 10;
function foo( a ){
console.log( a );
}
foo( 30 );
// 2. 变量赋值规则 :
// - 根据访问规则找到我们赋值的变量是哪一个;
// - 进行赋值;
var a = 10;
function foo( a ){
console.log( a ); // 30
a = 20;
console.log( a ); // 20;
}
foo( 30 );
console.log( a ); // 10
var b = 10;
function foo(){
b = 20;
}
console.log( b ); // 10;
foo();
console.log( b ); // 20;
// - 名称概念 :
// 在全局作用域之中声明的变量叫做全局变量;
// 在局部作用域之中声明的变量叫局部变量;