1.函数定义
在这之前呢,咱先说一个JavaScript和Java不同的地方
那就是JavaScript竟然有一种类型交function,对的。我其实是上一周刚刚才听说函数原来也可以是一种类型,虽然是引用类型,那也足够显示他的特殊。
也就是说它可以赋值,可以做一些Java中没有的操作。甚至在面对对象编程是也是利于函数来操作的。
正常呢函数都是这样的(随便来个例子蛤)
function (a,b)
{
return '巴拉巴拉'
}
同时,也可以这样,采用变量赋值的方法来声明函数,也可以将函数赋值给别人
var fn = function()
{
return 'balabala'
}
var a1 = fn;
a1();
同时,函数中也可以嵌套函数,实现套娃行为
因为这种特性,后面将会有一种交闭包的结构,能够在函数外部访问到出全局变量以外的函数内部变量
var fn = function()
{
var n = 0;
function fn1()
{
console.log(n)
}
return fn1();
}
//console.log(n) 会报错n is not defined
fn(); //输出函数内部n的值0
还有一件事,函数不支持重载哦,也就是说同名函数会被覆盖
2.函数调用
1.至于函数调用的方式,普通的就是fn(),如果组合函数,可以使用return返回值调用。如下
<script type="text/javascript">
var fn = function()
{
function sum(a,b)
{
var sum = a + b;
console.log(sum)
}
return sum;
}
//a等于fn函数运行的结果,自然a就是函数sum
var a = fn();
a(1,2); //输出3
</script>
2.还有就是call和apply的方法
get.apply(xiaoming, [20,10]);
get.call(xiaoming, 10,20);
//get是函数名
3.关于立即调用函数表达式
就是让函数立刻使用一次,就像这样,不需要调用,直接直接运行
var result1 =(function(i){
var value = i;
return value;
}(100));
console.log(result1);
3.函数作用域
很简单,就是函数内部的变量,外部是不能随便访问的
var fn = function()
{
var n = 0;
function fn1()
{
console.log(n)
}
return fn1();
}
//console.log(n) 会报错n is not defined
如果想要访问,那就得用闭包咯
4.闭包
闭包就是值在函数作用域范围之外去访问作用域中的变量的值
或者读取其他函数内部的函数,上面已经举过例子了,如果你好好看一遍就知道咯~
同时需要注意的就是关于内存的问题,因为闭包会使变量都保存在内存中,所以除非必要,没必要经常性使用,会导致性能问题。
5.arguments
JavaScript还有一个免费赠送的关键字arguments
,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments
类似Array
但它不是一个Array
:
利用arguments
,你可以获得调用者传入的所有参数。也就是说,即使函数不定义任何参数,还是可以拿到参数的值
function abs() {
if (arguments.length === 0) {
return 0;
}
var x = arguments[0];
return x >= 0 ? x : -x;
}
abs(); // 0
abs(10); // 10
abs(-9); // 9