1、当内部函数被保存到外部时,将会生成闭包,闭包会导致原有作用域链不释放,造成内存泄漏(内存泄漏=内存被占用得不到释放,原有内存减少(反向比喻))
2、运行期上下文:当函数执行时,会创建一个称为执行器上下文的内部对象。一个执行期上下文定义一个函数执行时的环境。函数每次执行时的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文。函数每次执行时,都会把新生成的执行期上下文。填充到作用域链的最顶端。当函数执行完毕。它所产生的执行上下文被销毁。
3、查找变量:从作用域链的顶端一次向下查找。
4、对象的创建方法
1、var obj={} planinObject 对象字面量/对象直接量
2、构造函数;1、系统自带的构造函数 object、2、自定义
5、闭包实例
<style>
*{
margin: 0;
padding: 0;
}
ul{
list-style: none;
}
li:nth-of-type(2n)
{
background-color: red;
}
li:nth-of-type(2n+1)
{
background-color: aqua;
}
</style>
</head>
<body>
<ul>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
</ul>
<script>
function test() {
var liArry = document.getElementsByTagName("li");
for (var i = 0; i < liArry.length; i++) {
(function(j){
liArry[i].onclick = function () {
console.log(j);
}
}(i));
}
}
test();
</script>
输出:点击对应li,输出结果为正确的0-4下标
function test() {
var liArry = document.getElementsByTagName("li");
for (var i = 0; i < liArry.length; i++) {
// (function(j){
liArry[i].onclick = function () {
console.log(i);
}
// }(i));
}
}
test();
输出:输出结果都为下标5;console.log访问的都是object对象中,已经累加的值
call和apply的作用:
相同点:改变this指向;
不同点:传参列表不同,call(对象,实参),apply(对象,数组[实参])