函数对于任何语言来说,都是重头戏。对于JS这种没有类之说的语言,更是重中之重,他承受太多的比重。
函数表达式与函数声明的区别
函数有三种表达方式,分别是函数表达式、函数声明、匿名函数。主要区分一下函数表达式和函数声明。这两者基本是一样的,但是有一点却是不一样的。解析器会率先读取函数声明,并在代码任何之处都可以使用。但是函数表达式只能执行到他所在的代码才能执行。
<script>
a();
b();
function a()
{
document.write("This IS a");
}
var b=function()
{
document.write("This IS b");
}
</script>
结果是This IS a.,然后弹出一个错误。
另外下面的一个例子,
<script>
function a()
{
document.write("This IS a");
}
var b=function()
{
document.write("This IS b");
}
a();
b();
function a()
{
document.write("This IS a 2");
}
var b=function()
{
document.write("This IS b 2");
}
</script>
结果是This IS a 2This IS b。
函数声明,从上向下全部解析,后面会把前面的函数声明覆盖掉。
普通函数域构造函数的区别
其实构造函数域普通函数是一样的,只不过看你是怎么调用的,如果使用new的话,就是构造函数,否则是普通函数。
使用构造函数还是需要注意几点事情,关于属性的建立
var name="JIM";
name="JIM";
this.name="JIM";
上面有三种,最后一种才是正确的。第一种无非是建立函数内部作用域的变量,第二种是建立了一个全局变量。
回调函数call与apply的区别
两者的区别只是在第二个参数不一样,第一个都是传入的是一个作用域。
apply第二是必须是一个数组类型,例如Array或者arguments对象。
call后面的参数,一个一个的向后面列出来。
下面的一个小例子
<script>
function add(a,b )
{
document.write(a+b+"\n");
}
add.call(this,2,3);
add.apply(this,[3,5]);
(function(){add.apply(this,arguments)})(4,5);
</script>
也就是说,apply也就是两个参数,但是call参数的个数就不一样了。