当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JS作用域

JS作用域

2019年04月05日  | 移动技术网IT编程  | 我要评论

js作用域:1)预解析‘找一些东西’:varfunction参数...(参数相当于在函数局部声明了一个变量,并且赋值)。

a = 未定义;

只会找 var a ;var b; 后面的值 不去读取;默认给这些找到的变量 赋一个未定义的值

所有的变量,在正式运行代码之前,都会提前赋了一个值:undefined;

fn = function fn(){ alert(1) };

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

js的预解析类似于 先找到一堆东西 放到仓库

在预解析时,遇到重名的变量:只留一个

变量和函数重名了 就只会留下函数

函数和函数重名了 遵循优先级保留最后一个

2)逐行解读代码

当开始逐行读取代码 读到 alert(a);不会往下找 是先回到仓库找 看有没有一个a 所以 第一个alert弹出的是 undefined

当读到第二行的时候 修改仓库中以前找到的变量,进行重新赋值

alert(a);

var a = 1;

var b = 2;

function fn(){

alert(1);

}

函数调用 也会预解析 //局部

1)预解析 2)逐行解读代码

var a =1 
function fn1(){
alert(a);	//undefined 局部的解析
var a = 2;
}
fn1();
alert(a); //1 找的是全局的a

===================================================

var a =1 
function fn1(){
alert(a);		// 1
a = 2;
}
fn1();
alert(a); //2  在函数中 已经把全局a的值改变

从子级作用域跳到父级作用域找 是作用域链。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网