发表于: 2019-03-31 22:00:33
1 686
今天完成的事情:
1、今天算是草草的把任务二写完了吧,感觉有些地方有点懵,不是很扎实,还需要理清思路好好巩固一下。
2、今天写了一些任务三的代码,一脸懵逼,看来还要死扣啊。
以下是今天写的一些任务三的js代码:
var arr = sessionStorage.players;
players = JSON.parse(arr);
console.log(players);
//取序号
var para=document.getElementById('num');
var search=document.getElementById("search");//按钮键
var btnNum=0;//
var hid1=document.getElementsByClassName('hidden1');
var hid2=document.getElementsByClassName('hidden2');
var num=0;//身份号
var roles=0;//身份
//页面初始化
function reset(){
for (var i = 0; i < hid2.length; i++) {
hid2[i].style.display="none";
}
num+=1
para.textContent=num;
search.textContent="查看"+num+"号身份";
};
其实任务三就是一个切换的过程,最主要的还是把握好什么时候去切换,如何去切换,需要把思路理清晰。
明天计划的事情:
1、明天需要巩固一下任务二的一些不懂的地方,抓紧时间赶任务。
遇到的问题:
1、进入到js之后发现做任务的时候思路很重要,可能还是我的学习方法不对的原因吧,总是在做完一项之后就不知道该做什么了。
收获:
1、
javascript执行环境及作用域
执行环境定义了变量或者函数有权访问的其他数据,决定了他们各自的行为。每个执行环境都有一个与之关联的变量对象。环境中定义的所有变量和函数都保存在这个对象中。虽然我们在编写代码的时候无法访问这个对象,但解析器在处理数据时会在后台用到它。执行环境是一个概念,一种机制,它定义了变量或函数是否有权访问其他数据
1、全局环境:
全局环境是最外围的一个执行环境。全局执行环境被认为是window对象。因此所有全局变量和函数都是作为window对象的属性和方法创建的。代码载入浏览器时,全局执行环境被创建(当我们关闭网页或者浏览器时全局执行环境才被销毁)。比如在一个页面中,第一次载入JS代码时创建一个全局执行环境。
这也是为什么闭包有一个内存泄露的缺点。因为闭包中外部函数被当成了全局环境。所以不会被销毁,一直保存在内存中。
2、函数执行环境
每个函数都有自己的执行环境,当执行进入一个函数时,函数的执行环境就会被推入一个执行环境栈的顶部并获取执行权。当这个函数执行完毕,它的执行环境又从这个栈的顶部被删除,并把执行权并还给之前执行环境。这就是ECMAScript程序中的执行流。
也可以这样解读:当调用一个 JavaScript 函数时,该函数就会进入与该函数相对应的执行环境。如果又调用了另外一个函数,则又会创建一个新的执行环境,并且在函数调用期间执行过程都处于该环境中。当调用的函数返回后,执行过程会返回原始执行环境。因而,运行中的 JavaScript 代码就构成了一个执行环境栈。
当函数被调用时函数的局部环境被创建(函数内的代码执行完毕后,该环境被销毁,同时保存在其中的所有变量和函数定义也随之被销毁)。
2-1定义期
函数定义的时候,都会创建一个[[scope]]属性,通这个对象对应的是一个对象的列表,列表中的对象仅能javascript内部访问,没法通过语法访问。
(scope也就是作用域的意思。)
我们定义一全局函数A,那么A函数就创建了一个A的[[scope]]属性。此时,[[scope]]里面只包含了全局对象【Global Object】。
而如果, 我们在A的内部定义一个B函数,那B函数同样会创建一个[[scope]]属性,B的[[scope]]属性包含了两个对象,一个是A的活动对象Activation Object、一个是全局对象,A的活动对象在前面,全局对象排在后面。
简而言之,一个函数的[Scope]属性中对象列表的顺序是上一层函数的Activation Object对象,然后是上上层的,一直到最外层的全局对象。
二、Scope/Scope Chain(作用域/作用域链)
当代码在一个环境中执行时,都会创建一个作用域链。 作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。整个作用域链是由不同执行位置上的变量对象按照规则所构建一个链表。作用域链的最前端,始终是当前正在执行的代码所在环境的变量对象。
如果这个环境是函数,则将其活动对象(activation object)作为变量对象。活动对象在最开始时只包含一个变量,就是函数内部的arguments对象。作用域链中的下一个变量对象来自该函数的包含环境,而再下一个变量对象来自再下一个包含环境。这样,一直延续到全局执行环境,全局执行环境的Variable Object始终是作用域链中的最后一个对象。
通过上面的分析,我们可以得知内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。
评论