JS函数内部函数:

时间:2016-03-11 07:41:51

标签: javascript function scope

我能这样做吗?

function calltime(gmt,ajaxfile){
    //do something with vars gmt & ajaxfile...

    function (){
        alert(gmt+ajaxfile); 
    }
}

正如您可能已经注意到我希望没有名称的内部函数使用父级的参数而不直接将它们作为参数发送,是否可能或者是否存在其他方式(没有创建完全独立的函数)?

3 个答案:

答案 0 :(得分:1)

这是让它发挥作用的一种方法。这些方法将在内部进行自我调用。如果你不想在调用calltime时调用它们,那么你可以查看@ harry的答案,它会返回内部函数而不是调用它。

var calltime = function(gmt, ajaxfile) {
  (function (g, a){ 
    alert(g + a); 
  })(gmt, ajaxfile);
};

calltime('Hello ', 'there');

但如果你真的不想指定参数,你可以直接这样做:

var calltime = function(gmt, ajaxfile) {   
  (function (){ 
    alert(gmt + ajaxfile); 
  })();
};

calltime('Hello ', 'there');

内部函数将自行调用。您可以将其复制并粘贴到chrome检查器中进行测试。

还有一个,既然我们正在谈论自我调用,那么也可以调用你问题的一切!

(function calltime(gmt, ajaxfile) {   
  (function (){ 
    alert(gmt + ajaxfile); 
  })();
})('Hello ', 'there');

编辑:另外一个版本包含许多参数。

var calltime = function () {
  (function () { 
    var args = Array.prototype.slice.call(arguments);
    alert(args.join(' ')); // outputs 'hello there friend'
  }).apply(this, arguments);
}; 

calltime('hello', 'there', 'friend');

答案 1 :(得分:1)

  function calltime(gmt,ajaxfile){
  //do something with vars gmt & ajaxfile...

     return  function (){
        alert(gmt+ajaxfile); 
    }
}
 //you can call like this
 calltime('Hello', 'there')();

 //you can call like this also
 var callit = calltime('Hello', 'there');
 callit();

如果要在函数内创建函数,则需要创建一个clouser。以便您可以在以后访问该内部函数,并且可以随时在内部函数中使用外部函数参数和变量(范围)。所以你不需要将参数传递给内部函数。

答案 2 :(得分:0)

function calltime(gmt,ajaxfile){
    //do something with vars gmt & ajaxfile...

      var a = function (){
       alert(gmt+ajaxfile); 
         }
    }
    calltime('a','b');

你可以这样做。