两种方式
函数声明
function 函数名 () {} //分装函数 无结果 可以不写;
函数表达式(内部为匿名函数)
var 变量名 = function(){};
函数表达式中,创建的函数叫做匿名函数,因为function关键字后面没有标识符。
匿名函数调用
下面两个等价
var aa = function(x){
alert(x);
}(5);//5
(function(x){alert(x);})(5);//5
自执行函数
三种写法特点:
①结构清晰,开头加!,结尾加()。不容易乱,推荐使用;
②可以表明匿名函数与之后的()为一个整体,推荐使用;
③无法表明函数与之后()为一个整体,不推荐使用:
创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量,因此在执行完后很快就会被释放,关键是这种机制不会污染全局对象。
前面的()、+、-、!等告诉解析器这是个表达式,后面的()是让函数执行(表达式才能执行)
(function () { /* code */ } ()); // 推荐使用这个
(function () { /* code */ })(); // 但是这个也是可以用的
// 如果你不在意返回值,或者不怕难以阅读
// 你甚至可以在function前面加一元操作符号
!function () { /* code */ } ();
~function () { /* code */ } ();
-function () { /* code */ } ();
+function () { /* code */ } ();
以上 源 :https://www.cnblogs.com/jessiespur/p/9283101.html
中有详细介绍
其他相关链接
https://www.cnblogs.com/ayning/p/4113314.html
https://www.cnblogs.com/timl525/p/5092132.html
http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html
关于调用
有return时 return 返回到函数的顶部
function()返回return值 否则我return 默认返回undefined
document.write(function());
无return
调用
function();//函数内部需要有输出语句
多个函数共同实现一个效果 嵌套与否都可
框架 函数调用函数(自身或者别的)
预解析
js编译
语法分析
查找基本语法有没有错误
预解析
执行之前进行预解析
var、function关键字提前到“当前”作用域的顶部,变量默认值为undefined
关于变量冲突:
函数覆盖变量名称 函数后面覆盖前面
代码顺序执行
给提升到顶部的变量赋值