关于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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。