js数据类型
- 基本数据类型
Number、String、Boolean、Null、Undefined、Symbol、bigInt - 引用数据类型
object、Array、Date、Function、RegExp
js变量和函数声明的提升
- 在js中变量和函数的声明会提升到最顶部执行
- 函数的提升高于变量的提升
- 函数内部如果用 var 声明了相同名称的外部变量,函数将不再向上寻找。
- 匿名函数不会提升。
闭包函数
- 闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。在 JavaScript 中,闭包会随着函数的创建而被同时创建
- 好处
- 闭包很有用,因为它允许将函数与其所操作的某些数据(环境)关联起来。
假如,我们想在页面上添加一些可以调整字号的按钮。一种方法是以像素为单位指定 body 元素的 font-size,然后通过相对的 em 单位设置页面中其他元素(例如header)的字号: - 可以使用闭包来模拟私有方法。私有方法不仅仅有利于限制对代码的访问:还提供了管理全局命名空间的强大能力,避免非核心的方法弄乱了代码的公共接口部分。
- 闭包很有用,因为它允许将函数与其所操作的某些数据(环境)关联起来。
var Counter = (function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment: function() {
changeBy(1);
},
decrement: function() {
changeBy(-1);
},
value: function() {
return privateCounter;
}
}
})();
console.log(Counter.value()); /* logs 0 */
Counter.increment();
Counter.increment();
console.log(Counter.value()); /* logs 2 */
Counter.decrement();
console.log(Counter.value()); /* logs 1 */
- 坏处
- 闭包在处理速度和内存消耗方面对脚本性能具有负面影响。
== 和 ===的区别
-
==是非严格意义上的相等
值相等就相等
-
===是严格意义上的相等,会比较两边的数据类型和值大小
值和引用地址都相等才相等
js监听窗口变化及获取窗口大小