在javascript中将代码作为函数参数传递?

时间:2011-09-11 15:07:37

标签: javascript frameworks

我正在尝试自己创建一个javascript框架(所以没有jquery,mootools ...代码请),我想让我的框架的代码只能在框架函数中访问,例如,像这样:

frameworkname({
//framework code here
});

所以我的框架代码不会与其他框架冲突。我知道frameworkname({});是一个函数,但我不知道如何将代码作为函数参数传递。我知道这是可能的,因为我在jquery中很有经验,jquery到处都有这些东西(例如:$(document).ready(function(){//codehere});),但jquery开发人员是如何做到这一点的呢?我希望能够为我的框架做到这一点。任何帮助是极大的赞赏。

4 个答案:

答案 0 :(得分:6)

函数是JavaScript中的第一类对象。您可以使用与字符串,数字,数组或任何其他数据类型相同的方式传递它们。

var foo = function () { alert(1); };
var bar = function (arg) { arg(); }
bar(foo);

答案 1 :(得分:1)

在javascript中,函数只是一个变量,你提到的代码:

$(document).ready( function () {//code});
实际上,

被声明为没有名称的函数,然后将其作为参数传递给“ready()”。 因此,你的思想传递代码以方式运行

frameworkname( {} );

是非法的,因为“{}”是代码块,但不是任何类型的“变量”

答案 2 :(得分:1)

在JavaScript中,变量可以表示任何数据类型。因此,在function frameworkname( x ) { }中可以采用任何类型的参数(函数,对象,原语等)。

function frameworkname( x ) {
    if ( typeof x === "function" ) {
        x(); // function passed
    } else if ( typeof x === "object" ) {
        for ( var i in x ) {
           // Object passed
           x[i]();
        }
    }
}
frameworkname(function() {
    alert("function passed as argument");
});
frameworkname({
    hello: function() {
         alert("hello");
    }
});

答案 3 :(得分:0)

我认为是这样的:

function frameworkname(){

  this.ready = function(code){
      code();
  };
  return this;
}

frameworkname().ready(function(){
  console.log('Function executed'); 
});