JS作用域的解析和代码执行的原理


域: 空间、范围、区域..........

作用: 在什么样的空间、范围内可以对数据进行读、写操作!


浏览器内部读取JS功能:

1)先查找声明变量、函数、参数

var a = 未定义

所有的变量,在正式运行代码之前,都是提前赋了一个值:未定义、

fn = function fn1(){};

所有的函数,在正式运行代码之前,都是整个函数.

总称:JS的预解析 当遇到重名的会只留下一个

   变量和函数重名,预解析只会留下函数

  当函数和函数重名,预解析只会留下最后一个函数


2)逐行解读代码:

表达式: = + - * / % ++ -- ! 参数.......

表达式可以修改预解析的值!




alert(a); //弹出  function a(){alert(4);}

var a = 1;

alert(a); //弹出 1

function a (){ alert(0); }// 不是表达式不会修改a的值,什么事不会发生

alert(a); //弹出 1

var a = 4;

alert(a); //弹出4

function a(){ alert(4); }//不是表达式不会修改a的值,什么事不会发生

alert(a); // 弹出4

a(); // 报错  预解析里保存着 a = 4; number  所以a is no function

///

var a = 1; // a =1 1)预解析: a = 未定义   fn1 = function fn1() { alert(a); var a =2; }

function fn1(){2)逐行解读代码: 函数(局部预)调用: 1)预解析:  a = 未定义;

alert(a); //   未定义    2)逐行解析:a = 2;

var a = 2;

}

fn1();

alert(a); // 1

/

var a = 1;

function fn1(){

alert(a); //弹出1  函数里没有var 没有函数、参数什么都没找到,作用域链的原理由里到外返回父级找到a = 1;

a = 2; // 局部域可以修改外部变量的值

}

fn1(); 函数里加var和不加var最直接的表达

alert(a);   // 所以这里弹出的结果为2

var a = 1;

function fn1(a){

alert(a); // 未定义

a = 2; // 局部里修改a = 2;

}

fn1();

alert(a); // 1 父级的a还是原来的1;

var a =1;

function fn1 (a){

alert(a); // 这里得到1 这里面的a和父级的a是不相关的

a =2; //读取到这里改为 a = 2;

}

fn1(a); // 这里调用给赋值

alert(a); // 1


//想要获取函数内的值:

1)声明一个全局变量,然后获取:

var a = '';

function fn1(){

var b = '想要的内容';

a = b;

}

fn1();

alert(a); 

2)局部函数调用:

function fn2(){

var a = '想要的东西';

fn3(a);

}

fn2();

function fn3(b){

alert(a);

}



return:返回值

1)函数名+括号:fn1() ==> return 后面的值;

2)所有函数默认返回值:未定义;

3)return 后面的任何代码都不会执行!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值