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的值改变
从子级作用域跳到父级作用域找 是作用域链。