js函数定义 调用 预解析

两种方式

函数声明

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
关于变量冲突:
函数覆盖变量名称 函数后面覆盖前面

代码顺序执行

给提升到顶部的变量赋值

你可能感兴趣的:(js函数定义 调用 预解析)