js函数的定义
1.函数声明
function print(msg){ console.log(msg); }
print(1);
被声明的函数不会直接执行。
它们被“保存供稍后使用”,将在稍后执行,当它们被调用时。
2.函数表达式
var x = function (a, b) {return a * b}; var z = x(4, 3);
上面的函数实际上是一个匿名函数(没有名称的函数)。
存放在变量中的函数不需要函数名。他们总是使用变量名调用。
3.Function() 构造器
JavaScript 函数是通过 function 关键词定义的。
函数也可以通过名为 Function() 的内建 JavaScript 函数构造器来定义。
var myFunction = new Function("a", "b", "return a * b"); var x = myFunction(4, 3); // 等价于 var myFunction = function (a, b) {return a * b}; var x = myFunction(4, 3);
函数提升
提升是 JavaScript 将声明移动到当前作用域顶端的默认行为。
提升应用于变量声明和函数声明。
正因如此,JavaScript 函数能够在声明之前被调用:
myFunction(5); function myFunction(y) { return y * y; }
使用表达式定义的函数不会被提升。
自调用函数
函数表达式可以作为“自调用”。
自调用表达式是自动被调用(开始)的,在不进行调用的情况下。
函数表达式会自动执行,假如表达式后面跟着 ()。
您无法对函数声明进行自调用。
您需要在函数周围添加括号,以指示它是一个函数表达式:
(function () { var x = "Hello!!"; //我会调用我自己 })();
上面的函数实际上是一个匿名的自调用函数(没有名称的函数)。
arguments
function test(a,b){ consloe.log(test.length) consloe.log(arguments.length) } test(1,2,3) // 2 获取形参的长度 // 3 获取实参的长度
function test(a,b){ a=2; b=3; consloe.log(arguments[0]) consloe.log(arguments[1]) } test(1,1,1) // 2 // 3 test(1) // 2 // undefined 实参没传值,为undefined;给undefined赋值还是undefined
正常来说,函数外部的;无法识别函数内部的变量;
反之,越里面的函数,越能识别出本函数内的变量,和外层的局部变量和全局变量。
函数内部没有声明的变量,可以看成是全局变量(除了函数内存在同名的声明变量)。