JavaScript函数深究
1、函数之中可以定义命名函数,并将命名函数返回
function a(){
function b(){
alert("this is b ")
}
return b;
}
可以这样调用:
var c = a();
c();
或者这样调用:
a()();
2、函数之中可以返回匿名函数
function a(){
return function(){
alert("this is return no name function")
}
}
可以这样调用
a()();
或者这样调用
var c = a(); c();
3、可以在函数之中定义自定义类,并返回类,类的静态属性在对象的结构上是挂载在_prototype.construct下,实例属性是挂载在_prototype,和construct同级
function factory(){
function Tabs(name){
this.name = name;
}
Tabs._DEFAULT_VAL = {
'mean': 'private static property'
}
Tabs.prototype.deVal = {}
Tabs.prototype.init = function(){
alert('i am a instance method of Class , my name is init')
}
Tabs.addTab = function(options){
alert('i am a static method of Class , my name is <h2>add</h2>tab ')
}
Tabs.closeTab = function(tabName){
alert('i am a static method of Class , my name is <h2>close</h2> tab ')
}
return Tabs;
}
这样使用:
var Tabs = factory();
Tabs.addTab();
var tabs = new Tabs();
tabs.init();
4、函数作为函数参数
function exec(callback){
callback();
}
exec(function(){alert('callback')});
5、函数可以存放到数组中
var event = {}
function on(name,callback){
var list = event[name] || (event[name] = []);
list.push(callback)
}
function emit(name,data){
var list = event[name], fn;
if(list){
list = list.slice();
while(list.shift()){
fn(data);
}
}
}
6、函数名称首字母大写,则规范认为此函数为构造函数,构造函数的名称就是类名。使用new关键字为此类新建对象时,新对象的构造函数就是此函数。
7、函数名称不大写,也可以为函数定义属性
function exec(factory){
function require(){
}
require.resolve = function(){
alert("require resolve")
}
factory(require);
}
var f = function factory(require){
require.resolve();
}
exec(f);
8、可以将匿名函数、命名函数赋值给变量
var func = function inherit(){
console.log('----------');
}
func();
var func1 = function(){
console.log('*********************')
}
9、可以将带有参数的函数作为参数,传送给函数,在函数中对参数函数进行调用,示例如7
不得不感叹Javascript函数功能之彪悍,之强大。

浙公网安备 33010602011771号