欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS作用域

程序员文章站 2023-10-17 18:37:36
js作用域:1)预解析‘找一些东西’:varfunction参数...(参数相当于在函数局部声明了一个变量,并且赋值)。 a = 未定义; 只会找 va...

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的值改变

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