提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
1.变量的作用域概念
概念:变量的作用域(scope) 是程序源代码中定义这个变量的区域
分类:作用域分为 全局作用域 和 函数作用域(局部作用域) 两种
2.全局作用域
(1)全局作用域是最外围的一个执行环境,在web浏览器中,全局执行环境被认为是window对象。
(2)所有全局变量和函数都是作为window对象的属性和方法创建的。全局变量拥有全局作用域,在javascript代码中的任何地方都是有定义的。全局作用域直到应用程序退出例如关闭网页或浏览器时才会被销毁。
全局作用域变量:
JS中声明的全局变量是全局对象的属性;
函数体内不使用var声明而直接赋值的变量当做全局变量(局限性);
当函数内部已经存在当前变量,那么给没有var声明的同名的变量相当于重新赋值,并不会提升为全局
举例1:
var b=30
function fn(){
var a=20
console.log(a)//20
console.log(b)//30
}
fn()
运行结果:
举例2:
var a=30
function fn(){
// var a=20
console.log(a)
}
fn()
console.log(a)
运行结果:
3.局部作用域
(1)在函数内(var声明)的变量只在函数体内有定义。它们是局部变量,作用域是局部性的。
(2)函数参数也是局部变量,它们只在函数体内有定义。函数作用域中的所有代码执行完毕后,该作用域被销毁,保存在其中的所有变量和函数定义也随之销毁。
在函数体内,局部变量的优先级高于同名的全局变量,如果在函数内声明的一个局部变量或者函数参数中带有的 变量和全局变量重名,那么全局变量就被局部变量遮盖。
1.在es5中 函数的代码块内部的代码 可以访问形参变量 也可以访问外部的变量(全局) 就近优先
2.函数外面的代码不能直接访问函数内部的变量
3.作用域: 指一个变量它在哪些代码范围能够被使用,这些地方就是变量的作用域
举例3:
var a=20//全局变量==>变量会在程序运行时 把它设置为window对象的属性
function fn(){
a=40
}
fn()
console.log(a)
function fm(){
a=60
}
fm()
console.log(a)
运行结果:
局部变量就是函数内部能使用 外部不能使用的变量( var,形参)
举例4:
var obj={
name:"karen"
}
function fn(n){
//隐式操作 var n=内存中的数那个传入的对象
// n.name="jack" 其实没有修改n的值
n={name:"jack"}//把n的值改了
}
fn(obj)//obj取值操作 取的是一个引用的对象
console.log(obj.name)
运行结果: