几乎所有的语言都有作用域的概念,简单的说,作用域就是变量和函数的可访问范围,即作用域控制在变量和函数的可见性和生命周期。
在Javascript中,引擎、编译器和作用域共同协调完成Javascript的执行过程。
引擎: 从头到尾负责Javascript代码的编译和执行
编译器:负责词法的分析和代码的生成
作用域:负责收集和维护由声明的变量组成的一系列查询,并执行一套非常严格的规则,确定当前执行的代码对这些变量的访问权限
进行预编译
变量没声明就引用,会报错,但对象方法,对象变量没声明,是undefined
在函数中变量不声明就赋值,会被认为是全局变量,用var声明后为函数变量
在执行函数时时也是先编译后执行,但要注意函数定义中(即大括号中)的代码即使有错只要函数不执行,就不会有影响,但一执行函数,开始函数预编译就会出错。
解析例如:
function bbt(){
var a = 23
var b = 46;
function arr(){
c+=20
var c = 20;
function cdd(){
var a = 10;
function num(){
}
console.log(a)
}
cdd();
}
console.log(b);
arr();
console.log(b);
}
bbt();
在作用域内,先在栈带入一个 main()函数,引用window GO,里面有a :10,b:46,bbt:,在bbt()里可调用GO里的值,再往里面调入一个arr函数,里面有c:20,cdd:,在arr()可调用bbtAO,GO里面的值,再往里面调入cdd函数,里的值有a:10,num(),在cdd可调用arrAO,bbtAO以及GO里面的值,再往里面调入num(),可以调用cddAO,arrAO,bbtAO,GO.
在num函数输出a 的值,直接输出为10,因为他自己就有值,在arr函数里面输出b的值,但是arr里面没有b的值,所以他向它的上一级函数前找,在函数bbt里面找到b的值,位46.
在bbt里面输出b的值,同样是先在内部查找有没有值,有就用它的值,值为46,如果他没有可以去GO里面去查找。
javasript的作用域
最新推荐文章于 2021-11-05 13:32:46 发布