关于作用域和域解析
来源:互联网 发布:mac电磁阀说明书 编辑:程序博客网 时间:2024/06/03 21:02
一、js变量作用域
1、全局变量:在函数外面定义的变量
2、局部变量:在函数外面定义的变量只能在函数里使用
二、浏览器解读js代码分为两个步骤
1、域解析
找一些东西:var关键字、function、参数;
所有的变量在正式运行代码之前,都提前赋了一个值,(undefined)未定义;
所有的函数在正式运行代码之前,都是整个函数块,fun=function(){...};
域解析时,遇到重名的,只留一个,如变量和函数重名,就只留下函数
2、逐行解读代码
表达式可以修改域解析的值(表达式:带+,-,*,/,=,...,参数等的式子)
三、看一些例子
1、
(1)域解析:var a=1;
function fun(){
alert(a);//undefined
var a=2;
}
fun();
alert(a);//1
找到一个var关键字,a=undefined;
找到一个函数,fun=function fun(){....}
(2)逐行读代码
var a=1,所以a=1;
然后有一个函数;
fun(),此处调用函数fun(),进入函数里,函数也是一个作用域,所以按步骤进行:
域解析:a=undefined
读代码:alert(a),a的值为undefined
a=2
函数外面的alert(a),此时的a为1,函数里的a的值为2,但是那是函数里,是局部。
2、
(1)域解析var a=1;
function fun(){
alert(a);//1
a=2;
}
fun();
alert(a);//2
找到一个var关键字,后面的变量a赋值为未定义undefined;
找到一个函数,fun=function fun(){...}
(2)逐行解读代码
a=1;
函数;
fun(),调用函数,进入函数,想对函数域解析,但是并没有发现var关键字、function或者参数,直接解读代码:
执行到alert(a)时,并没有在局部小仓库里发现关于a的值,所以会跳到上一级去找,此时发现a=1,所以弹出1;
执行到a=2时,也没有发现a,所以也找到了父级,修改a的值为2;
最后一句alert(a),弹出2。
(关于一个函数内部的变量,如果内部没有声明,就去上一级找,如果函数外也没有,就会报错。)
3、
var a=1;
function fun(a){
//var a;
alert(a);//undefined
a=2;
}
fun();
alert(a);//1
(1)域解析
(2)解读代码a=undefined;
fun=function fun(){....}
a=1;
函数;
fun(),对函数进行域解析,此时发现有一个参数a,相当于定义了一个a变量,即var a;所以a=undefined
alert(a),弹出undefined;
a=2;此时的2是给函数里的a赋值为2;
alert(a),弹出全局的a,值为1。
4、
var a=1;
function fun(a){
alert(a);//1
a=2;
}
fun(a);
alert(a);//1
(1)域解析
a=undefined;
fun=function fun(){....}
(2)解读代码
a=1;
函数;
fun(a),此时发现传入了参数a,这个a的值是全局的a,值为1,进入函数,传了一个1进去,所以alert 1;
a=2;这还是局部的a;
alert(a),这个a还是函数外的a,所以弹出的还是1。
- 关于作用域和域解析
- 作用域和预解析
- JavaScript 作用域和作用域链 解析
- JavaScript中作用域和作用域链解析
- JavaScript解析顺序和变量作用域
- javascript中的作用域和预解析
- JS作用域和预解析机制
- JS的解析过程和作用域
- 关于CT2A和CA2T的作用域
- 作用域&预解析
- 作用域解析及作用域链
- 关于java作用域
- 关于javascript作用域
- 关于var、作用域
- 关于作用域的
- 关于作用域
- 关于作用域
- 关于javaScript作用域
- MySQL的学习
- HOJ 2662 Pieces Assignment
- 数据库范式
- 过滤驱动的概念
- HDU5542(树状数组优化DP)
- 关于作用域和域解析
- jQuery异步请求ajax()之complete参数详解
- Gym
- 软件测试笔试
- 【问题解决】SSM-@Transactional注解事务无效探讨
- Shell脚本中整数的测试
- Hive中分区表的操作
- 食物链详解
- Java正则表达式