知识点一:函数
1、概念:具有相同的特定功能的代码封装在一起,就是函数
2、定义:
① 函数表达式
var $ = function () {
console.log("函数表达式");
}
② 数的声明
function fn1() {
console.log("函数的声明");
}
声明后的函数并不会执行
4、 函数的调用
① 方法()
5、函数的参数
在函数小括号中,具有向函数内部或者外部传递信息的作用
形式参数:在函数的定义中===形参
实际参数:在函数的调用中===实参
6、函数的返回值
1、定义:函数的调用就是函数的返回值
2、如果函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined
3、 如果函数使用 return语句,那么跟在return后面的值,就成了函数的返回值
4、 如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined
5、 函数使用return语句后,这个函数会在执行完 return 语句之后停止并立即退出,也就是说return后面的所有其他代码都不会再执行。推荐的做法是要么让函数始终都返回一个值,要么永远都不要返回值。
知识点二:函数其他
1、函数的命名规范
(1) 规则:
1) 由字母、数字、下划线、$符号组成,不能以数字开头
2) 不能是关键字和保留字,例如:for,while, this, name
3) 区分大小写
(2) 规范:
1) 函数名必须有意义
2) 遵守驼峰命名法
3) 建议不要用$作为函数名
2、函数的覆盖问题
(1) 同名函数后边的函数会覆盖前边的函数
3、匿名函数
(1) 定义:没有名字的函数
(2) 调用:自调用
(3) 例如:
(function () {
console.log("匿名函数");
})()
4、函数也是一种数据类型
(1) 是一种引用数据类型
(2) 通过typeof判断返回function
5、函数可以作为参数传入
function fn5(x) {
console.log(x);
x();
}
fn5(function () { console.log("可以作为参数传入") })
6、 函数可以作为参数反出
function fn6(x) {
return x;
}
fn6(function () {
console.log("可以作为参数反出");
})()
知识点三:预解析
1、概念:
① js通过浏览器内核中JavaScript引擎解析,在解析之前,会进行一项工作,预解析。会对以定义function,var进行提升
2、函数提升
3、变量的提升
只会进行声明的提升,不会进行赋值提升
4、同名函数的覆盖的提升
同名的函数,后面的会覆盖前面的
5、变量和函数同名
1、顺序的情况下:变量会覆盖函数名
2、提升的情况下:函数会提升,变量会忽略
6、不可能会提升到作用域外
在window中定义的变量:全局变量
在函数中定义的变量:局部变量(只能在当前作作用域中使用)
7、函数表达式并不会被提升
知识点四:作用域链
1、定义
① 函数内指向函数外的链式结构。就称作作用域链
2、全局作用域=全局变量
3、局部作用域=局部变量
只有函数才能产生局部作用域
4、局部变量
① 只在当前的作用域下是有效的
② 只有函数才能产生作用域
5、用域链查找规则
① 先从当前的作用中查找,如果没有,从父作用中查找
② 如果父作用域没有,还继续往上查找,直接到全局作用域
③ 如果全局没有,就报错
6、注意:
① 声明变量使用`var`, 如果不使用`var`声明的变量就是全局变量( 禁用 )