发表于: 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 = 0; i < 10; i++) {
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(1, 2, 3);//1
// console.log()
// 在打印台输出
// 可以打印任何类型的数据
console.log(["a, b, c"]); //[a,b,c]
// 支持多个参数的写法
console.log(1, 2, 3)// 1 2 3
}
作用域链:
当代码进入到某个执行环境,准备执行时,会为该执行环境对应的变量对象创建一个作用域链。作用域链其实就相当于一个变量
对象的集合,其第一个元素是当前执行环境的变量对象,最后一个元素是全局执行环境的变量对象(在浏览器中即window对象)。
标识符解析是沿着作用域链一级一级地搜索标识符的过程
其实就是[[scope]],每个js的函数都是一个对象,对象中有写属性我们可以访问,有些不行;
js引擎存取的[[scope]]就是其中一个;它就是作用域,是隐性的属性,只有系统能够用它,存储了执行期的上下文的集合。
扩展:
1、执行环境和作用域是一回事吗?
作用域和执行环境是两个完全不同的概念,我们试图给他俩分别一个明确的定义,发现很难,因为你很难定义一个概念“是什么”,但是我们可以搞清楚他们分别起什么作用。另一个令人迷惑的地方就是js中的this关键字。其实执行环境就是this的值。总的来说,作用域是相对于函数来讲的,因为ES5 里没有块级作用域,只有函数才能形成新的作用域。而且作用域在函数声明时就定义好了。
作用域里声明的变量和函数,外部无法访问,注意,是外部。而执行环境在函数被调用时才生成。
函数作用域中的变量一定访问不到?即局部变量访问不到吗?
按道理说,局部变量在全局环境中访问不到的,但是闭包的出现打破了这个定律。
为什么需要块级作用域?
1、内层变量可能会覆盖外层变量
2、用来记数的循环变量,可能会泄露为全局变量
评论