发表于: 2020-05-16 22:14:53

0 2237


今天完成的事情:


作用域链大概就是这么个原理

GO中有函数a先定义a.[[scope]]

0:GO

执行函数时生成上下文AO,向第一位添加aAO

0:aAO

1:GO

如果函数a中还有函数b,先定义b.[[scope]]在函数a中定义

0:aAO

1:GO

执行函数b时生成上下文,向第一位添加bAO,顺着作用域链从上到下查找

0:bAO

1:aAO

2:GO


预编译

1.创建AO对象
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
3.将实参值和形参统一
4.在函数体里面找函数声明,值赋予函数体


闭包

var arr = [];

for(var i=0;i<5;i++){

    arr[i]=function(){

        console.log(i);

    }

}

上面这种写法调用arr[0],得到的i是6,因为调用的时候顺着原型链在GO中找到的i就是6

var arr = [];

for(var i=0;i<5;i++){

   (function (j){

       arr[j]=function(){

        console.log(j);

    }

}(i))

}

把i当成参数传给立即执行函数,每一次调用其赋值给arr的函数都是在立即执行函数环境上定义的

当执行函数arr[0],会从立即执行函数原型链AO中找到0,arr[1]是1


明天计划的事情:


继续学习



遇到的问题:



收获:

按淘宝做了一个无缝轮播图

思路就是第一张放最后一张图片,最后一张放第一张图片

比如图片为3,宽度用JS动态设置为3+2

设置变量0,比如0为第一张,1是第二张(显示的第一张) (-变量-1)* 一张图片的宽度 初始化图片位置

然后判断边界迅速回到第一张或最后一张



链接:https://zhuchunyu1995.github.io/xzy/JS/banner/banner.html


返回列表 返回列表
评论

    分享到