1.什么是做用域函数
简单的来讲就是,做用域就是指变量的适用范围;spa
2.做用域还分全局做用域和函数做用域orm
全局做用域是window:全局变量,他是随处可见的,能够反复使用,可是他的缺点是,会使全局污染对象
函数做用域:局部变量,仅在函数内能够用,不能够反复使用ip
这是咱们简单谈到的内存
3.下面咱们来看变量的做用域作用域
变量的做用域无非就是两种:全局变量和局部变量。 it
全局变量做用域:io
这个咱们相对咱们应该好理解些,全局嘛,咱们只要不在局部里面均可以访问到console
局部做用域:
和全局做用域相反,局部做用域通常只在固定的代码片断内可访问到,而对于函数外部是没法访问的,最多见的例如函数内部,
在这须要注意的是,函数内部声明变量的时候,必定要使用var命令。若是不用的话,你实际上声明了一个全局变量!
<scritpt>
function fun(){
a = 100;
}
fun();
console.log(a);//此时的a是等于100
</script>
为何呢?
这就是不用var关键字的后果,虽然你是想声明一个局部变量的可是你没有使用var关键字,因此致使这个a变成了全局变量(这是我简单写的一个变量名a,通常咱们在写代码时,要规范化)
咱们重点来看一下局部的
<scritpt>
var a = 200;
function fun(){
console.log(b);//undefined
var b= 100;
console.log(b);//100
}
fun();
console.log(a);//200
</script>
【这又是为何呢?
来,咱们继续来分析首先咱们来看这里面那些事全局变量,那是局部变量,咱们从上往下看,a就是全局变量(还不明白的请看上面的全局变量的定义)继续找咱们会看到console.log(b);//undefined和局部变量 var b= 100;有人就会问,不是局部变量b有值吗,为何两个输出b的值不同呢?第一个输出就是只要函数内定义了一个局部变量,函数在解析的时候都会将这个变量“提早声明”; (这句话的意思就是当有局部变量的时候,函数在调用以前会把变量提早,值留在原地这个过程,因此此时的变量是没有值得,因此才是空)继续往下走此时var b= 100;因此才输出100的,下面全局变量的输出就不用多说了。】这个还不懂的下去本身多练习
1.变量在当前环境now、内部环境f1,内部深层环境f2/f3...都起做用的现象造成了一个链条,这个链条就成为变量的"做用域链"
2.1 变量必须"先声明,后使用"
函数能够"先使用,后声明",缘由是函数有预加载的过程(函数声明先于其余执行代码进入内存).本质仍是函数声明在前,使用在后.
2.2 内部环境变量能够访问外部环境的变量,反之否则.
环境: 每个函数内部都是一个环境,最外边是全局环境.
类型: 函数环境、全局环境
2.3 变量的做用域是声明时以为的,而不是运行时
Active Object 活动对象(抽象的)
执行环境:
js代码执行是有环境的(全局环境,函数内部环境)
该环境定义了其有权访问的其余数据
环境有一个与之关联的"活动对象AO"
环境中因此的变量和函数都是活动对象AO的属性
全局环境是最外围的执行环境,活动对象是window对象
执行环境中的代码执行完毕后就被销毁
执行环节能够访问变量的类型及优先顺序
内部变量>>>内部函数>>>形参>>>外部变量(函数,形参);