昨天小优跟大家详细介绍了php中字符替换函数,今天我们来了解js作用域与词法:
作用域由里向外
内层的函数可以访问外层函数的东西(如变量、函数等)
function t1(){
var str1="aaaa";
function t2(){
var str2="bbbb";
console.log(str1); //访问t1中的str1
}
t2();
console.log(str2); //t1中访问t2中的str2
}
t1();
执行结果:aaaa uncaught ReferenceError: Console is not defined
词法分析
主要分析三样东西,这里说的是函数
A.参数
B.变量声明
C.函数声明
在函数执行前函数会先做词法分析:
一、生成一个Active Object对象(活动对象),检查AO对象
二、形参会形参AO的属性,值全部等于undefined,接下来接收实参,此时属性的值是接收的实参
三、函数内变量的声明(是声明而不是赋值,如var a=5而不是a=5)也形成AO的属性
四、分析函数的声明,形成AO的属性(如 function t(){},就会形成AO.t)
例子1:
function t(x){
console.log(x);
}
t(2);
t();
执行结果:2 undefined
经过词法分析可得到函数参数X=undefined
运行t(2) 2替换了 undefined 而t()没有传值,因此X还是等于undefined
例子2:
function t(fun){
var fun;
console.log(fun);
function fun(){
}
console.log(fun);
}
t(null);
分析过程
生成AO对象
AO.fun=undefined
声明变量fun
声明函数,形成AO.fun=function(){},到此原来的undefined被覆盖
分析完后执行:两个console.log(fun),因此结果是打印:function fun() function fun()
例子3:
function t(fun){
var fun=”aaaa”;
console.log(fun);
function fun(){
}
console.log(fun);
}
t(null);
分析过程
生成AO对象
AO.fun=undefined
声明变量fun (注意这里的赋值过程不再词法分析的范围内)
声明函数,形成AO.fun=function(){},到此原来的undefined被覆盖
分析完后执行:赋值 和console.log(fun),因此结果是打印:aaaa aaaa
亚星管理平台菁思福科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!
亚星管理平台菁思福科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。亚星管理平台菁思福科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、DIY体验、720全景展厅及3D虚拟仿真)、移动端应用(手机站、APP开发)、微信定制开发(微信亚星官网、微信商城、企业微信)、微信小程序定制开发等一系列互联网应用服务。
责任编辑:亚星管理平台菁思福科技
版权所有:https://www.uzncsrj.com (亚星管理平台菁思福科技) 转载请注明出处