JS-函数进阶
1. 函数的定义方式
-
函数声明
function hxx(){ // code here }
-
函数表达式(匿名函数)
let fn = function(){ // code here }
-
new Function (构造函数)
let fn = new Function('参数1','参数2','函数体')
-
PS:
- Function 里的参数必须是字符串格式
- 所有函数都是是 Function 的实例
- 函数也属于对象
函数的原型图
2.函数调用的方式
- 普通函数
- 作为对象的方法
- 构造函数
- 绑定事件函数
- 定时器函数
- 立即执行函数
3.函数里的this
调用方法 | this的指向 |
---|---|
普通函数调用 | window |
构造函数调用 | 实例对象,原型对象里面的方法也指向实例对象 |
对象方法调用 | 该方法所属对象 |
事件绑定函数 | 绑定事件对象 |
定时器函数 | window |
立即指向函数 | window |
4.严格模式
1.什么是严格模式?
ES5 的严格模式是采用具有限制性 JavaScript 变体的一种方式,即在严格的条件下运行 JS 代码。
2.开启严格模式
严格模式可以应用到整个脚本或个别函数中
1.为整个脚本开启严格模式
<script>
"use strict";
// 在整个标签内都开启了严格模式
</script>
2.为一个函数开启脚本
function fn(){
"use strict";
// 整个函数内都开启了严格模式
}
3. 严格模式下的变化
1. 关于变量:1.取消变量提升,所有变量必须先声明再使用;2.严禁删除已经声明的变量 delete x;
2.严格模式下this的指向问题:
- 严格模式下全局作用域里的函数里的this 指向 undefined
- 严格模式下 构造函数不加new 调用,this指向是undefined 会报错
- 定时器的this还是指向 window
- 事件和对象还是指向调用者
3.函数的变化
- 函数不能有重名的参数
- 函数必须声明再顶层,非函数的 “块作用域内” 不允许声明函数;比如在 if for 等块作用域里
事件和对象还是指向调用者
3.函数的变化
- 函数不能有重名的参数
- 函数必须声明再顶层,非函数的 “块作用域内” 不允许声明函数;比如在 if for 等块作用域里