问题描述
|
我正在使用我们正在使用Knockout.js和jQuery构建的新应用程序。我更喜欢在脚本中使用“ 0”,但是由于我们使用的某些库无法与“ 0”一起使用,因此我必须使用函数形式。
我不喜欢将javascript内联地放在
<script>
标记内,所以我通常将所有内容都放在单独的文件中,以便预处理器可以将其缩小和压缩。
给定这些条件,我想知道在script标记中创建函数时默认情况下如何对它们进行范围划分。现在我正在做这样的事情:
$((function(win) {
\"use strict\";
win.myFunction = function () {
// do stuff
};
}(window)));
如您所见,我在window
对象上放置了函数,因此可以在视图中调用它们。我注意到我可以在我的jQuery模板中调用它们而无需限定它们(即:我可以只叫myFunction
而不是window.myFunction
),但是我担心这在所有浏览器中都不起作用。是否所有浏览器都允许您调用没有完全限定名称的窗口对象中放置的函数?如上定义,如何从匿名方法中将函数放在全局范围内?
感谢您的见解!
解决方法
窗口对象本质上是全局范围。任何不属于函数范围的变量都是window对象的属性。
您可以通过将全局变量设置为window对象的属性来设置它,如下所示:
window.myFunction = function() {
// do stuff
}
但是,用名称填充全局命名空间可能不是一个好主意。这样,混乱,无法维护的代码和奇怪的错误就会出现。例如,所有jQuery函数都是jQuery
(或$
)对象的属性或子属性。这意味着他们可以定义“ 10”,而不必担心与全局“ 11”方法发生冲突。您应该考虑对自己的代码执行相同的操作:创建一个全局全局命名空间对象以容纳所有\“ global \”方法。