可以在立即调用的函数表达式中调用JavaScript函数

Hal*_*yon 8 html javascript jquery html5

我正在使用jQuery并在一个立即调用的函数表达式中包含一个函数,如下所示:

<script type="text/javascript" src="jquery-1.8.3.min.js"></script>
<script type="text/javascript">
    (function ($) {

        var message = 'x called';

        function x() {
            alert(message);
        }
    })(jQuery);

    x();
</script>
Run Code Online (Sandbox Code Playgroud)

这将导致错误,因为函数"x"未在立即调用的函数表达式之外定义.有没有办法在立即调用的函数表达式之外调用函数"x"?

cdh*_*wie 8

仅当您以某种方式公开该功能时.例如,您可以从外部函数返回它:

var x = (function ($) {

    var message = 'x called';

    function x() {
        alert(message);
    }

    return x;
})(jQuery);

x();
Run Code Online (Sandbox Code Playgroud)

或者,类似地,您可以在对象上返回它:

var obj = (function ($) {

    var message = 'x called';

    function x() {
        alert(message);
    }

    return {"x": x};
})(jQuery);

obj.x();
Run Code Online (Sandbox Code Playgroud)

函数内部声明的函数和变量不能直接从该函数外部访问,除非您通过返回某些内容提供一些访问它们的方法,或者提供对该函数外部声明的变量的引用.


nzi*_*nab 5

为您可能想要使用的其他类或函数创建一个命名空间。您不想持续污染全局命名空间,但没有理由不能创建一个全局命名空间并将您的个人事物置于其下:

(function($){
  window.MyNamespace = function(){};
  var message = "Something here";

  $.extend(MyNamespace, {
    x: function(){
      alert(message);
    }
  });
})(jQuery)

MyNamespace.x()
Run Code Online (Sandbox Code Playgroud)