作用域:指一个变量它在哪些代码范围能够被使用,这些地方就是变量的作用域。
在es5中,函数的代码块内部的代码可以访问函数代码块内的变量﹑也可以访问外部的变量(全局变量),取变量时,采取就近原则。
函数外面的代码不能直接访问函数内部的变量
例子:
<script>
var b = 10
function fn(){
var a = 20
console.log(b)//10 ,函数内部可以获取外部的变量
}
fn()
console.log(a)//报错,函数外部不能获取函数内部的变量
</script>
全局变量:变量会在程序运行时 ,把它设置为window对象的属性
局部变量:就是只在函数内部使用,外部不能使用的变量(形参也是局部变量)
练习(掌握):
<script>
//第一种情况
var obj={
name : "karen"
}
function fn(n){
//隐式代码: var n="karen"
n="jack"//只改变了变量n的值,并未改变对象的name属性值
}
fn(obj.name) //obj.name取值然后再传入函数
console.log(obj.name) //karen
//第二种情况
var obj={
name:"karen"
}
function fn(n){
//隐式操作 var n = 引用
n.name="jack" //引用的是同一块内存空间
}
fn(obj)//obj取值操作 取得是一个引用的对象
console.log(obj.name) //jack
//第三种情况
var obj={
name:"karen"
}
function fn(n){
//隐式操作 var n = 引用(是内存中的那个传入对象)
n={name:"jack"}//赋值一个新的对象,不同对象指向不同的内存地址
}
fn(obj)//obj取值操作 取得是一个引用的对象
console.log(obj.name) //karen
</script>