繁体   English   中英

(function($){..})(jQuery); 此包装器/闭包中定义的函数不能在外部调用

[英](function($) { ..})(jQuery); function defined in this wrapper/closure can not be called outside

我有以下代码块,其中我定义了1个函数,我试图在代码块外调用该函数,它给了我函数未定义的错误。为什么?

    (function($) {
       function addNumbers(num1, num2) {
          return num1 + num2;
       }

    })(jQuery);

addNumbers(2,3) return error undefined function.

我该怎么做才能使addNumbers()在此块之外调用?

这是一个基本的范围界定问题。 如果在另一个函数内部声明一个函数,则只能在该函数内部访问它。 您无法在外部访问它。

您可以简单地将inner函数返回到变量,并在外部的任何地方使用它。

  var myFunction = (function($) { function addNumbers(num1, num2) { return num1 + num2; } return addNumbers; })(jQuery); alert(myFunction(2,3)); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 

其他功能中定义的功能仅限于该功能。 它们只能由该范围内的其他代码调用。 因此,为了调用addNumbers()函数,该调用必须在addNumbers()函数的父函数内部。

例:

 function test() { function addNumbers(num1, num2) { console.log(num1 + num2); } addNumbers(2, 3); } test(); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 

您在一个范围内定义一个函数(匿名函数),然后尝试从另一个范围(全局)运行它的问题。 反之,则必须这样做:

// Declare function first.
function addNumbers(num1, num2) {
   return num1 + num2;
}

// Now, inside anonymous function - you can use your function (because it in global scope, and accessible from here).
(function($) {
   console.log(addNumbers(2,3));
})(jQuery);

立即功能是匿名的。 因此,如果要从外部访问内部函数,则必须返回值或函数。

var test = (function($) {
  return function addNumbers(num1, num2) {
    return num1 + num2;
  }
}(jQuery));

console.log(test(2,3));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM