定义:作用域即是能够产生作用的范围,每种语言都会存在作用域
分类:1、全局变量 2、局部变量(通常在函数体内)
(使用var关键字声明的变量不是全局变量就是局部变量)
全局变量:声明在函数外部的变量,在代码中任何地方都能访问到的对象拥有全局作用域。
(1)最外层函数和在最外层函数外面定义的变量拥有全局作用域
var num = 100;//最外层函数外面定义的变量 function fun(){ console.log(num) var num1 = 200;//最外层函数内定义的变量 function fun2(){ console.log(num1); } } fun()
(2)所有末定义直接赋值的变量拥有全局作用域,即没有使用var关键字声明的变量都是全局作用域
function fun(){ num = 100; } fun(); console.log(num)//输出结果:100,num未使用var关键字声明,为全局变量
注意: 函数必须经过调用后才会被执行
(3)所有window对象的属性拥有全局作用域
function fun(){ window.name = "internet"; //window.location } fun()
局部变量:声明在函数内部的变量
function fun(){ var num = 123; console.log(num); } fun(); console.log(num)//报错,未定义
局部变量的优先级要高于同名的全局变量,也就是说当局部变量与全局变量重名时,局部变量会覆盖全局变量
var num = 1; function func() { var num = 2; return num; } console.log(func()); //输出:2
补充:变量提升
用var关键字定义,所有变量会在该作用域的最前面进行声明;变量赋值,代码写在哪里就在哪里赋值
变量声明提升,函数声明整体提升