1、JS函数的参数可变长。如果一个函数规定有两个参数,在调用函数的时候不一定非要传两个参数,也可以不传或只传一个;另外就是说在写函数的时候不需要规定参数,也可以通过函数的内部属性arguments得到参数值。
例:
function test(){
var args=arguments;
alert(arguments);
}
test(1,2,3,4);
结果会弹出4;
2、JS函数不能重载。
简单说就是如果在一个窗口里,写两个函数名相同的函数,在调用时按照加载顺序,会执行最后一个加载函数。
3、命名空间
window是全局对象。其实就是一层一层的对象来构成命名空间,而window是顶层对象。
4、函数嵌套
JS函数是可以嵌套的,下面是一个调用例子:
var outname="hys";
function outfun(){
var name="qhm";
function innerfun(){
alert(outname+name+"在一起");
}
return innerfun;
}
var cache=outfun();
cache();
这个例子还实现了外部可以调用函数内部的方法,JS规定外部是不能直接调用内部方法的,上例通过return把内部方法返回出来,这样就变象实现了调用。
5、call和apply的用法及区别
function myfunc(){
alert(this.name);
}
myfunc.call({name:'人才'});
myfunc.apply({name:'蠢才'});
这两个关键字的功能就是调用执行方法对象,也就是myfunc。
区别如下:
myfunc.call({},arg1,arg2,arg3);
myfunc.apply({},[arg1,arg2,arg3]);
第一个参数为函数中this需要绑定的对象,这是一样的。
第二个参数就不一样了,call是可变长参数,而apply是一个参数数组。区别仅此而已。
6、可通过‘()’直接运行函数
例如:
(function(){
alert("test");
})();
执行结果为弹出test警告框。
7、Function
可以通过 var fn=new Function('x','s','alert("test")');来创建函数,其中最后一个参数为方法体,前面的所有参数为方法入参。一般不推荐这样写。
8、JS自带的方法对象属性
在JS中,方法本身也是一个对象,一旦创建就自动包含五个隐藏属性:arguments、callee、caller、length、prototype。
arguments:方法参数属性,可以通过arguments.length来得到传入方法的参数个数。并且可以通过arguments[0]下标的方法得到参数的值。注意:arguments虽然可以通过数组下标来访问但本身不是数组类型,不能够用数组特有的方法来处理。
callee:是arguments的一个属性,意为指向函数自己arguments.callee
(function test(){
alert(arguments.callee);
})();
结果会弹出函数本身作为一个字符串弹出。
caller:指向的是调用者。
function code(){
alert(code.caller);
}
function beathim(){
code();
}
beathim();
会弹出beathim,意为是beathim在调用code函数。
prototype:可以增加属性,增加了之后可以立即影响到这个类的所有实例。添加上去的属性是被当做“实例属性”对待的,利用了JS的原型查找机制,这么做可以大量节资源。
Animal=function(name,age){
this.name=name;
this.age=age;
}
Animal.prototype.TYPE="动物";
var animal=new Animal("姓名","25");
alert(animal.TYPE);
9、JS定时器
setTimeout和setInterval两个自带的定时器,不同之处在于,setTimeout是在指定的时间之后执行一次指定的函数,而setInterval会不断执行,直到取消。取消定时器的方法名分别是clearTimeout和clearInterval
10、delete方法
该方法可以对对象里的属性进行删除
var obj={};
obj.sayHello=function (){
alert("hello");
};
obj.sayHello();
delete obj.sayHello;
obj.sayHello();
以上例子,第二次调用法sayHello方法就会报方法不存在的错误。