码迷,mamicode.com
首页 > Web开发 > 详细

关于js作用域总结,对妙味视频学习的总结

时间:2015-04-03 06:56:23      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:作用域   预编译   作用域链   

主要理解以下四条

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

关于js作用域总结,对妙味视频学习的总结

标签:作用域   预编译   作用域链   

原文地址:http://10024302.blog.51cto.com/10014302/1627826

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!