有学有练才叫学习:学而不思则罔,思而不学则殆:学而不习,纸上谈兵,习而不进,画地为牢!

js 预解析和作用域链

javascript cat 11个月前 (11-18) 37次浏览 已收录 0个评论 扫描二维码

作用域变量函数的有效使用范围,有全局作用域函数作用域两种

全局作用域<script>标签下

局部作用域:函数里面的

1、全局变量和局部变量

全局变量:声明在script标签下的变量或函数,全局变量在任何地方都可以访问,任何地方都可以修改

var a = 10;
function fun1() {
    a++;
    console.log(a); // 11
}
function fun2() {
    a++; // 12
    a--; // 11
    console.log(a); // 11
}
fun1();
fun2();
console.log(a); // 11

局部变量:在函数内部声明的变量或函数,就是局部变量。局部变量或函数只能在函数内部访问

function sum() {
    var a = 10;
    console.log(a); // 10
    function s() {
        console.log(a); // 10
    }
    s();
}
sum();
console.log(a); // a is not defined
s(); // s is not defined

2、作用域链

JavaScript 中的一种值的查找机制,当需要使用到一个变量或函数,先查找自身作用域,自身作用域没有再从父级作用中找,依次查找,一直到全局,全局还是没有,显示 is not defined。

var a = 10;

function fn() {
    var a = 20;
    function ab() {
        var a = 30;
        console.log(a); // 先找自身作用域
    }
    ab();
}

fn();

3、预解析

浏览器是一个集合体,可以解析html css js 图片 视频等等资源,这个里面有一块专门用于解析js,我们称为js解析器

js解析器如何工作?大致分为两步:预解析 和 逐行解读

1、预解析

找东西,找var、函数、参数,找到var之后,给它赋一个值为undefined,提到最上面,找到函数之后,将函数整体提到最上面,参数同var

如果var 和 var同名,后面的覆盖前面的,如果函数同名,后面的覆盖前面的,如果var和函数同名,则函数覆盖var

2、逐行解读

从上到下一行一行的执行,见到+ - * / % ++ -- = 等等操作,就跑到前面去修改你的值,遇到读取,就跑到前面读取你的值

遇到函数调用,就又开一个新的作用域,继续执行上面两步

喜欢 (0)
cat
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址