作用域
定义:一个变量可以生效的范围
变量不是在所有的地方都可以使用,而这个变量的使用范围就是作用域
-
函数作用域
JS划分作用域是用大括号划分的-
局部作用域
在JS中只有函数能生成一个局部作用域,别的都不行
每一个函数都是一个作用域变量在函数内声明,变量为局部变量
//在函数大括号之中声明的变量,我们称之为局部变量 function foo(){ var a = 10;//在大括号之中声明的变量只能在这个大括号之中使用 console.log(a); } foo(); //运行结果: 10 console.log(a); //运行结果: ReferenceError: a is not defined 表示引用错误,a未被定义
- 因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。
- 局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁
-
全局作用域
全局作用域是最大的作用域
生命周期是和程序同步的,程序不关闭,作用域一直存在变量在函数外定义,即为全局变量。
var a = 1; //变量声明没有被大括号包裹,我们称之为全局变量 //这个变量在任何地方都可以访问 console.log(a); //运行结果: 1 function foo(){ console.log(a); } foo(); //运行结果: 1
-
在全局作用域中定义的变量可以在任何地方使用
-
全局变量的命名空间是唯一的
如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。
function foo() { a = 10; //没有使用var关键字声明的变量 console.log(a); } foo(); //运行结果: 10 console.log(a); //运行结果: 10
所有 window 对象的属性拥有全局作用域
一般情况下,window 对象的内置属性都拥有全局作用域,例如 window.name、window.location、window.top 等等。
-
由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行:
function foo() { var x = 1; function poo() { var y = x + 1; // poo可以访问foo的变量x! } var z = y + 1; // foo不可以访问bar的变量y! }
-
全局变量和局部变量的区别
1.生命周期 全局变量:生命周期是和程序同步的;程序不关闭,变量一直存在 局部变量:生命周期是和函数执行同步的,函数执行结束变量就被删除了 2.命名空间 全局之中的命名空间是唯一的 局部命名空间一个作用域一个
-