JavaScript的一些知识碎片(2)-反射-全局变量-回调

JavaScript中的反射:编程语言中的反射原理都一样,就是通过操作metadata(描述语言的语言)来完成一些不具备反射功能的语言很难实现的功能。在静态语言中,反射是一个高大上的东西,比如在运行时动态创建方法并调用,延迟绑定等等等等,当八九年前第一次用到C#的反射时,那个激动劲就别提了。但是在动态语言世界里,很多功能不必要通过反射实现了,所以javascript的反射会变得比较简单,因此javascript中反射的主要用法就那么几个如typeof ,instanceof,hasOwnProperty

var alteral={
name:"a lteral"
};

console.log(typeof alteral );//object 
console.log(alteral.hasOwnProperty("name"));//true
console.log(alteral.hasOwnProperty("gender"))//false;

var fun = function(){
var subfun=function(){
return null
};
};

typeof(fun);
console.log( fun instanceof Function); //true

 

全局变量:

在javascript中,你可以在任何地方随便定义一个全局变量。小应用好像很方便,代码成规模,切分文件后,就完蛋了。编译器不管,我们可以管。

两种方式:

1.全部写在一起,如程序最顶端,好管理。

2.写一个全局变量的容器,在使用时把所有的全局变量都扔进去。这样的好处也是统一管理方便检索。

var variableBag={
}

 

回调 在JavaScript中的实现形式是这样的:将一个函数当做参数传入另一个函数,这个函数会在适当的时候调用被传入的参数。我们用一段代码的例子来解释:

function mainfunction(callback){//定义一个宿主函数,它接收一个callback函数作为参数。

    //做一些事情,比如等待1秒钟后,把当前时间传给callback
    var startTime = new Date().getTime(); 
    while (new Date().getTime() < startTime + 1000);
    var now = new Date().getTime();
    
    callback(now);//调用传入的参数
};

function afunction(time){//定义callback函数
    console.log("afunction is called");
    console.log(time);
};

mainfunction(afunction);//调用宿主函数

 

执行这段代码的结果就是在等待一秒钟后回调函数afunction被宿主函数调用,同时宿主函数传递了一个参数给afunction,这一点非常重要。因为在现实中,传递的参数都是回调函数要正确执行所依赖的内容。

 

posted @ 2014-12-10 23:09  skytraveler  阅读(945)  评论(0编辑  收藏  举报