jQuery函数范围混乱

时间:2015-01-07 14:16:46

标签: javascript jquery

编辑我希望该功能可以全局访问

为什么myfunction0在dom ready调用中工作而myfunction1不起作用?

external.js文件

   (function($) {

    // functions defined like that works
    myfunction0 = function() {
      console.log("hello world");
    }

    // functions defined like that do not work
    function myfunction1() {
      console.log("hello world");
    }

    })(jQuery);

的index.html

<script>
$(function () {
  myfunction0(); // works
  myfunction1(); // does not work not defined
})
</script>

第一个函数定义是否获得全局范围,而第二个函数定义只是一个本地文件&#39;范围?

2 个答案:

答案 0 :(得分:1)

您尚未使用myfunction0关键字声明var,因此已在全局范围内声明它。 function声明与声明它们的范围有关。

如果您将var关键字添加到myfunction0(您应该这样做),您会发现这两种功能都无法访问:

var myfunction0 = function() {
  console.log("hello world");
}

Example fiddle

答案 1 :(得分:1)

function myfunction1() { }

将是其定义范围的本地。不是文件,而是它包含的匿名函数。

myfunction0 = function() { }

声明一个变量(恰好是一个函数)。

由于没有附加var,该变量获得全局范围。