我只是想知道这两者之间有什么区别
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中的任何内容似乎都可以称之为没问题。
似乎跨脚本文件在设置时会调用函数时出现问题。
答案 0 :(得分:2)
在ECMAScript中,只有 函数(无块范围)范围,并且在函数内使用'var'或'function'关键字定义的任何内容都不能在范围之外访问(除非你将它分配给外部范围(如窗口)中的某些内容。您在另一个函数中定义了一个函数,并且根据函数作用域规则无法访问它。
但是,你可以访问外部作用域上定义的变量/函数,这就是你在第二个例子中所做的。
所以从本质上来说,当你是$(function(){})时,你正在创建一个沙箱,一个限制区域,如果你定义任何变量你不能访问它们,除非你特别指定它们是属性类似于window对象的东西,它是全局命名空间。
答案 1 :(得分:1)
我认为这个问题是因为额外的“$();”造成的。包装函数会创建一种闭包,从而导致范围有限。