关于函数
函数声明
js里一切功能始于数据终于数据。处理数据的工具就是函数。
函数,使用时先声明,在计算机内部分配空间的时候 相当于声明了一个变量,只是函数的形式。
在调用的时候才执行,函数内部的变量和参数,在调用时赋值,调用结束则销毁。函数的生命周期是每一次调用开始到结束。
函数的分类
1.有名函数
function fn(){ }
2.匿名函数表达式
let fn = function(){};
3.创建有名函数表达式
var fn1=function xxcanghai(){};
注意:具名函数表达式的函数名只能在创建函数内部使用
4.自执行匿名函数
匿名函数不需要特意去调用,即声明即执行。
匿名函数的写法有很多种,匿名函数看做是一个表达式,只有表达式才能立即执行
;function(){/*...*/}();
(function foo(){/*...*/}());
(function foo(){/*...*/})();
!function foo() {/*...*/}();
+function foo() {/*...*/}();
-function foo() {/*...*/}();
~function foo() {/*...*/}();
5.构造函数Function
6.其它创建函数的方式
setTimeout\ setInterval 等形式创建
函数的默认值
this
每个函数默认返回的是undefined; 每个函数都有一个this,代表函数在执行的时候指向。
函数中的this指向详情说明,在this指向一文中进行说明。
return
每个函数都有return 属性,不写默认值的返回值是undefinde,。
return 后边没有变量的时候是跳出当前执行的函数。
return 后边有值,就是执行函数时返回的值,可以是任何类型。如果返回的是函数,有可能形成闭包。
arguments
arguments是一个类数组,是关于参数的默认值。在es5中
函数的参数
定义函数时的参数是形参, 执行时传入的参数是实参。
如果函数的参数依然是函数,就称为回调函数。
函数参数的默认值是arguments
函数的扩展 - 闭包
详细内容参考闭包总结一章。
函数的上下文和执行顺序,函数作用域链
(相对于整个js程序而言)
1.函数先声明,在浏览器编译的时候,会把声明的函数提到当前作用域顶部
2.函数的执行的顺序,是声明函数在js文件中调用的顺序
3.函数名和变量名相同的时候,函数的优先级高于变量
只是在es5中,es6是会报错的
var a = 10;
x();
function x() {
alert(a);
var a = 20;
}
alert(a);
打印出
// undefiend
// 10
var a = 10;
x();
function x() {
alert(a);
a = 20;
}
打印出
// 10
// 20
x();
function x() {
alert(a);
var a = 10;
}
alert(a);
打印出
// undefined
// 第二次没有结果, 在window没有这个参数
只要弄清楚函数和变量同名时,函数的优先级高于变量,之后再出现就是重新赋值,这也说明一个问题,函数在声明的时候,相当于一个变量。
~~~总之函数是非常有潜力的东西,函数也基本撑起了js的整片天,其中相互嵌套,反复调用也是非常有意思的~~