发表于: 2021-07-28 21:01:42

1 1847


今天完成的事情:JS知识汇总;


明天计划的事情:写页面,巩固知识;;


收获:

aleart和console.log的区别


    // Console 用法:
    // // // console.log 用于输出普通信息
    // // // console.info 用于输出提示性信息
    // // // console.error 用于输出错误信息
    // // // console.warn 用于输出警示信息

    var array = [];
    for (let i = 0i < 10i++) {
        array[i= i;
    }
    console.log(array);

    // aleart和console.log的区别:

    function btn() {
        // alert()
        // 有阻塞作用,不点击确定,后续代码无法继续执行
        // alert()只能输出string, 如果alert输出的是对象会自动调用toString()方法
        alert(["a, b, c"]); //a,b,c
        // alert不支持多个参数的写法, 只能输出第一个值
        alert(123);//1


        // console.log()
        // 在打印台输出
        // 可以打印任何类型的数据
        console.log(["a, b, c"]); //[a,b,c]
        // 支持多个参数的写法
        console.log(123)// 1 2 3
    }


作用域链:
当代码进入到某个执行环境,准备执行时,会为该执行环境对应的变量对象创建一个作用域链。作用域链其实就相当于一个变量
对象的集合,其第一个元素是当前执行环境的变量对象,最后一个元素是全局执行环境的变量对象(在浏览器中即window对象)。
标识符解析是沿着作用域链一级一级地搜索标识符的过程
其实就是[[scope]],每个js的函数都是一个对象,对象中有写属性我们可以访问,有些不行;

js引擎存取的[[scope]]就是其中一个;它就是作用域,是隐性的属性,只有系统能够用它,存储了执行期的上下文的集合。


扩展:

1、执行环境和作用域是一回事吗?


作用域和执行环境是两个完全不同的概念,我们试图给他俩分别一个明确的定义,发现很难,因为你很难定义一个概念“是什么”,但是我们可以搞清楚他们分别起什么作用。另一个令人迷惑的地方就是js中的this关键字。其实执行环境就是this的值。总的来说,作用域是相对于函数来讲的,因为ES5 里没有块级作用域,只有函数才能形成新的作用域。而且作用域在函数声明时就定义好了。
作用域里声明的变量和函数,外部无法访问,注意,是外部。而执行环境在函数被调用时才生成。
函数作用域中的变量一定访问不到?即局部变量访问不到吗?

按道理说,局部变量在全局环境中访问不到的,但是闭包的出现打破了这个定律。


为什么需要块级作用域?


1、内层变量可能会覆盖外层变量
2、用来记数的循环变量,可能会泄露为全局变量





返回列表 返回列表
评论

    分享到