2011-08-14 151 views
0

考慮下面的代碼:是否可以在匿名函數中訪問函數?

(function($) { 
    function hello(who) 
    { 
    console.log('Hello: '+who); 
    } 
})(jQuery); 

$(document).ready(function() { 
    hello('World'); 
}); 

它是如何將有可能從匿名函數外部訪問Hello功能?

+0

嗯,問題。爲什麼你將jQuery作爲參數傳遞給匿名函數,然後不給它命名? – Kayla

+0

@tylermwashburn:只需一些快速複製粘貼+編輯。 – PeeHaa

回答

1

假設你會想,最終其他的方法添加到這個封閉物,那麼,你可以使用模塊模式創建命名空間在封閉中私下公開地公佈事物的方法。爲了說明:

myAppNamespace.hello(myAppNamespace.world); // -> Hello: World 
myAppNamespace.hello('Bob'); // -> Hello: Bob 
myAppNamespace.helloText; // undefined 
myAppNamespace.concatText; // undefined 

另外,我用的自動執行功能的$參數,使jQuery傳遞的東西,你會使用$內部訪問jQuery

2

你喜歡

+0

這似乎是最好的方法的最簡單的例子。 –

1
(function($) { 
    function hello(who) 
    { 
    console.log('Hello: '+who); 
    } 

    $(document).ready(function() { 
    hello('World'); 
    }); 
})(jQuery); 

只是將所有的引用,我會做這樣的事情

var hello = (function() { 
    return function(who) 
    { 
    console.log('Hello: '+who); 
    }; 
})(jQuery); 

$(document).ready(function() { 
    hello('World'); 
}); 

你在哪裏匿名函數,然後就可以存儲並訪問在任何範圍內返回功能到範圍內的hello函數。

var myAppNamespace = (function($){ 
    var exports = {}, // the return object 
     helloText = 'Hello: '; // private variable 

    function concatText() { 
    var returnString = ''; 
    for (var i = 0, il = arguments.length; i < il; i++) { 
     returnString += arguments[i]; 
    } 
    return returnString; 
    } // private method 

    exports.world = 'World'; // public property 
    exports.hello = function (who) { 
    console.log(concatText(helloText, who)); 
    }; // public method 

    return exports; // assign exports to myAppNamespace 
}(jQuery)); 

這裏的方法和屬性都只是爲了顯示的例子: