Open fezaoduke opened 7 years ago
360 度评估:每个员工都接受来自上司,同事,组员的多方位评估,然后要求被评为 “有他没他一个样 “的职员改善工作方式。
自从成为码农的第一天开始好像没有真正撸过一片自己的笔记,以往都是copy粘贴形式做笔记,现在来撸感觉不不晚。
以往在界面上控制多个DIV按照固定沾满一个容器的时候,通常都是通过javascript来计算固定宽带,根据容器的总宽度做减法来实现, 并且在窗体发生改变的时候又要来一段代码,现在有了calc()这个属性,无疑是大大简化了计算的方法及代码。 比如: 一个DIV容器有3个DIV,前两个DIV占据200px + 300px, 这个时候第三个DIV需要沾满整个容器。
$(".div3).css({
width:$(window).width() - 200 - 300
})
.div3{
width: calc(100% - (200px + 300px)); //表达式支持 + - * / 计算方式。
}
有了这个属性,做自适应布局非常轻松。
今天忘记带书回家,看了另外一本《全栈应用开发精益实践》 Day1.Web应用开发周期概览章节
今天看的js红宝书,第四章:变量作用域和内存问题:
指有权访问另一个函数作用域的变量的 函数
function createComparison() {
var a = 1;
return function() {
console.log(this)
if(a == 1) {
return true;
}
}
}
createComparison()();
// window
//true
最后返回的这个函数是在全局作用域中调用的,但仍然能够调用 createComparison
内部的变量 a
,这是因为内部返回的函数的作用域包含了 createComparison
的作用域。
当某个函数被调用时,会创建一个执行环境(execution context)及相应的作用域链。然后,使用
arguments
和其他命名参数的值来初始化函数的活动对象(activation object)。但在作用域链中,外部函数的活动对象始终处于第二位,外部函数的外部函数的活动对象处于第三位...直至作用域链终点的全局执行环境。
通常来说一个函数在初始化的时候,会预先创建一个包含全局变量对象的作用域链中,当调用时,会创建一个执行环境,并把当前的活动对象推入执行环境的前端。当执行完毕后,局部活动对象会被销毁。但是对于闭包函数而言,由于它引用了外部函数的活动对象,并在全局中去执行,导致其定义时的外部函数并不能被销毁,从而常驻内存中,直到闭包函数被销毁,才被销毁掉。这也就容易导致内存泄漏。常见的方法是可以手动解除闭包的引用。eg:
var result = createComparison()();
result == null;
当我们想要为一组li绑定点击事件时,我们通常会这么做:
<ul>
<li>111</li>
<li>111</li>
<li>111</li>
<li>111</li>
<li>111</li>
</ul>
function bandClick() {
var nodeLists = document.getElementsByTagName("li");
for(var i = 0; i < nodeLists.length; i++) {
nodeLists[i].addEventListener("click", function() {
console.log(i);
});
}
}
然而我们发现结果却都是 4。这是因为我们调用的都是 i 的引用。
一种解决方法是下面这种:
function bandClick() {
var nodeLists = document.getElementsByTagName("li");
for(var i = 0; i < nodeLists.length; i++) {
nodeLists[i].addEventListener("click", (function(num) {
return function(){
console.log(num);
}
})(i));
}
}
这里我们每循环一次就将变量 i
的值按值传递给内部的函数,而内部都有一个闭包,这样就会保留着传进去的值。
第二期活动开始
倒数第21天
签到