ES5中作用域
1.在es5中没有函数就不谈作用域。
2.定义:一个标识符,在哪些写代码的地方能够使用,这写地方就是这个标识符能够起作用的区域,称为作用域。
3.作用域又分全局作用域和局部作用域。
局部作用域:函数内部的变量,只能在函数内部访问。函数里面能访问里面和函数外面的标识符,但是函数外面不能访问里面的标识符。
eg:
var a=100
function fn() {
//声明提前var b
console.log(b)//undefined,执行时b还未被赋值但已经声明提前了
var b=20
console.log(a)//100,可以访问外部变量
c=20
}
fn()
console.log(b)//报错不能访问函数里面的变量
console.log(c)//报错
4.函数的调用: 是去它声明的作用域下执行代码,不是去调用的作用域执行代码
eg:
var a=30
function fn () {
var a=200
return {say:function() {
console.log(a)
}}
}
var a=20
var obj=fn()
obj.say()//虽然是obj调用,但是时去它声明的作用域执行代码,
所以a在say作用域找没有a,再去它的函数fn作用域找得到a=200
当一个作用域内有相同的标识符
方法:同一个作用域内有相同的标识符声明提前:
1.变量声明
2.形参声明
3.形参赋值(实参给形参上数据)
4.函数声明
eg:
//1.变量声明提前var a
2.形参声明var a
3.形参赋值var a=1
4.函数声明function a(){}
取数据的时候取最后一个数据
function fn (a) {
console.log(a) //打印函数funtion a(){}
var a=2 //给变量a赋值2
function a () {
}
console.log(a)//a=2
}
fn(1)