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

时间:2017-05-23 04:25:00

标签: javascript jquery

我有以下块,我已经定义了1个函数,我试图在块外调用该函数,它给我函数undefined error.why?

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

    })(jQuery);

addNumbers(2,3) return error undefined function.

如何让addNumbers()在此块之外调用?

5 个答案:

答案 0 :(得分:2)

这是一个基本的范围界定问题。如果在另一个函数中声明一个函数,它只能在该函数内部访问。你不能在外面访问它。

答案 1 :(得分:2)

您只需将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>

答案 2 :(得分:1)

其他函数中定义的函数作用于该函数。它们只能由该范围内的其他代码调用。因此,为了调用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>

答案 3 :(得分:1)

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

// 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);

答案 4 :(得分:0)

直接功能是匿名的。所以,如果你想从外部访问内部函数,你必须返回值或函数。

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

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