一、闭包
1.什么是闭包(closure)?
闭包是一种特殊的函数。
2.如何生成一个闭包?
当一个内部函数引用了外部函数的数据(变量/函数)时, 那么内部的函数就是闭包;
所以只要满足"是函数嵌套"、“内部函数引用外部函数数据”;
3.闭包特点:
只要闭包还在使用外部函数的数据, 那么外部的数据就一直不会被释放;
也就是说可以延长外部函数数据的生命周期;
4.闭包注意点:
当后续不需要使用闭包时候, 一定要手动将闭包设置为null, 否则会出现内存泄漏;
5.注意点: 在ES6中由于 { } 是块级作用域, 所以只要在块级作用域中定义了一个函数,
并且这个函数中用到了块级作用域中的数据, 那么这个函数就是闭包;
二、表单相关补充
1.如果想获取input中输入的内容, 必须通过value属性来获取;
2. 监听input失去焦点: onblur
3. 监听input获取焦点:onfocus
let oInput = document.quarySelector(".input");
oInput. onfocus = function(){
}
4.监听input内容改变:oninput / onchange
注意点:
- onchange 事件只有表单失去焦点的时候, 才能拿到修改之后的数据;
- oninput 事件可以时时获取到用户修改之后的数据, 只要用户修改了数据就会调用(执行);
oninput 事件只有在IE9以及IE9以上的浏览器才能使用;
在IE9以下, 如果想时时的获取到用户修改之后的数据, 可以通过onpropertychange事件来实现;
如果是通过代码给input设置的数据, 那么不会触发oninput事件;
三、循环索引同步
在ES6中:
1.for循环中通过let定义的变量是一个局部变量;
2.for循环中通过let定义的变量每次执行循环体都会重新定义一个新的, 也就是每个循环体都有一个属于自己的变量;
3.for循环中如果定义了函数, 这个函数用到了通过let定义的变量, 那么这个函数是一个闭包;
四、命名技巧
1.在前端开发中,如果 id 名称是由多个单词组成,那么建议使用下划线来连接。
< div id = "top _ top ">
2.在前端开发中,如果 class 名称是由多个单词组成,那么建议使用中划线来连接。
< div class = "tab - content" >
3.如果在方法名称前加上 _ ,代表告诉其他程序员这是一个私有的方法,不要调用。
_ change ( i) ;
注意点:仅仅是告诉别人这是一个私有的方法,并不是真正的一个私有的方法;(主要是为了提高阅读性)
-End