在Jquery.Document中有一个函数和没有它的函数有什么区别

时间:2009-09-24 02:58:00

标签: javascript jquery

我只是想知道这两者之间有什么区别

File1.js
$(function()
{
   function MyFunction()
   {
         // some code here
   }
});

File2.js

$(function()
{
      // call it.
      MyFunction();
});

File1.js
function MyFunction()
{
        // some code here
}


File2.js

$(function()
{
      // call it.
      MyFunction();
});

那有什么区别?当我做第一种方式并尝试从File2.js调用MyFunction()时,它从未起作用。我将我的函数移出了File1.Js中准备好的Jquery.Document并且它有效。

我在File1中有一些其他功能,即使它们在文件准备就绪,File1中的任何内容似乎都可以称之为没问题。

似乎跨脚本文件在设置时会调用函数时出现问题。

2 个答案:

答案 0 :(得分:2)

在ECMAScript中,只有 函数(无块范围)范围,并且在函数内使用'var'或'function'关键字定义的任何内容都不能在范围之外访问(除非你将它分配给外部范围(如窗口)中的某些内容。您在另一个函数中定义了一个函数,并且根据函数作用域规则无法访问它。

但是,你可以访问外部作用域上定义的变量/函数,这就是你在第二个例子中所做的。

所以从本质上来说,当你是$(function(){})时,你正在创建一个沙箱,一个限制区域,如果你定义任何变量你不能访问它们,除非你特别指定它们是属性类似于window对象的东西,它是全局命名空间。

答案 1 :(得分:1)

我认为这个问题是因为额外的“$();”造成的。包装函数会创建一种闭包,从而导致范围有限。