我正在使用Knockout.js和jQuery構建工作中的新應用程序。我更喜歡在腳本中使用"use strict"
,但由於我們使用的一些庫不適用於"use strict"
,我必須使用功能表單。<script>標記中的函數是如何作用域/名稱空間的?
我不喜歡在內嵌<script>
標籤內置JavaScript,所以我通常將所有內容放在一個單獨的文件中,以便可以通過預處理器縮小和縮小它。
鑑於這些標準,我想知道如何在腳本標記中創建它們時默認作用域。現在我只是在做這樣的事情:
$((function(win) {
"use strict";
win.myFunction = function() {
// do stuff
};
}(window)));
正如你看到的,我把我window
對象的功能,這樣我就可以在我看來,給他們打電話。我注意到,我可以在我的jQuery模板中調用它們,而無需限定它們(即:如果是window.myFunction
,我可以調用myFunction
),但是我擔心這不適用於所有瀏覽器。是否所有瀏覽器都允許您調用放置在窗口對象中的函數,而不使用完全限定名稱?我如何在上面定義的匿名方法中將函數放置在全局範圍內?
感謝您的洞察!
你有一個額外的右括號,你調用的函數不會返回任何東西,所以你將'undefined'傳遞給'jQuery()'函數。 – user113716 2011-05-20 21:11:49
我確實有一組額外的括號(不是額外的一個),但這是'$(document).ready(function(){});'語法的簡寫。請參閱http://api.jquery.com/ready/以查看正在使用的此語法。 – 2011-05-20 21:16:23
你是對的,它是一套你不需要的,我對這個捷徑非常熟悉。但是你將'undefined'傳遞給那個快捷方式,因爲你正在調用沒有返回值的函數。因此,'.ready()'的快捷方式除了返回一個空的jQuery對象之外沒有任何其他功能。 – user113716 2011-05-20 21:30:43