关于js作用域总结,对妙味视频学习的总结
主要理解以下四条
1,预编译
查找 var function
2.,逐行解析,表达式会改变预编译的值
3.作用域链
4.每次到一个新的作用域链重复一1,2两个过程;
eg.1
alert(a); //function fn2(){var a =10} ,预编译 var a =1; alert(a); //1;表达式改变a function fn1(){ var a = 11;} alert(a); //1; 函数块不会改变a的值 var a =2; alert(a); //2 表达式
eg.2
var a =1; function a(){alert(2)}; typeof a ; //"number",typeof返回值是String a(); //报错,因为此时a是number
eg.3
var a = 1; function fn1(){ alert(a); var a = 2; } fn1(); //undefined,调用fn1函数,又开始预编译,此时搜索到var关键字,a为undefined alert(a); //1 此时搜索全局变量下,a=1
eg.4
var a = 1; function fn1(){ alert(a); a = 2; } fn1(); //1 调用fn1函数,预编译未发现关键字,通过作用域链搜索外部中的a alert(a) //2 由于fn1中 a赋值语句未使用var关键字,改变了全局变量a
eg.5
var a = 1; function fn1(a){ alert(a); a = 2; } fn1(); //undefined,由于传参a,其实意味着var a;预编译时发现关键字,声明了a alert(a)//1,由于fn1中var a,故在变量中a是局部变量
eg.6
var a = 1; function fn1(a){ alert(a); a = 2; } fn1(a); //1 alert(a) //1
本文出自 “f2e小菜鸟” 博客,请务必保留此出处http://10024302.blog.51cto.com/10014302/1627826
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。