严格模式
- 【严格模式对正常的 JavaScript 语义做了一些更改】
- 1、消除JavaScript 语法的一些不合理,不严谨之处,减少了一些怪异行为
- 2、消除代码运行的一些不安全之处, 保证代码运行的安全
- 3、提高编译效率 增加运行速度
- 4、禁用了在 ECMAScript 的未来版本中可能会定义的一些语法,为未来新版本的JavaScript做好铺垫,比如一些保留字
- 严格模式的分类
<body>
<!-- 为整个脚本(script标签)开启严格模式 -->
<script>
'use strict';
</script>
<script>
(function() {
'use strict';
})();
</script>
<!-- 为某个函数开启严格模式 -->
<script>
function fn() {
'use strict';
}
function fun() {
}
</script>
</body>
- 严格模式的变化
- 变量名必须先声明再使用
- 不能随意删除已经声明好的变量
- 严格模式下全局作用域中函数的 this 指向 undefined
- 严格模式下 如果构造函数不加 new 调用, this 指向的是undefined
- 定时器中的 this 还是指向 window
<script>
'use strict';
var num = 10;
console.log(num);
function fn() {
console.log(this);
}
fn();
function Star() {
this.sex = '男';
}
var ldh = new Star();
console.log(ldh.sex);
setTimeout(function() {
console.log(this);
}, 2000);
</script>
高阶函数
- 【函数也是一种数据类型也可以作为参数传递】
- 【高阶函数是对其他函数进行操作的函数,它将函数作为参数或者返回一个函数】
<script>
function fn(a, b, callback) {
console.log(a + b);
callback && callback();
}
fn(1, 2, function() {
console.log('我是最后调用的');
});
$("div").animate({
left: 500
}, function() {
$("div").css("backgroundColor", "purple");
})
</script>
闭包
<script>
function fn() {
var num = 10;
function fun() {
console.log(num);
}
fun();
}
fn();
</script>
- 闭包的作用
<script>
function fn() {
var num = 10;
function fun() {
console.log(num);
}
return fun;
}
var f = fn();
f();
</script>
- 闭包应用【点击 li 输出索引值 和内容】
<script>
var lis = document.querySelector('.nav').querySelectorAll('li');
for (var i = 0; i < lis.length; i++) {
lis[i].index = i;
lis[i].onclick = function() {
console.log(this.index);
}
}
for (var i = 0; i < lis.length; i++) {
(function(i) {
lis[i].onclick = function() {
console.log(i + "----" + lis[i].innerHTML);
}
})(i);
}
</script>
|