2013-09-09 2 views
3

Я хочу написать функцию, которая дает мне контроль над тем, какой API-интерфейс может выполнять. Например, как бы я написать анонимную функцию, которая в частном порядке выполняет без JQuery после JQuery был загружен на страницу:Написание действительно частных функций в Javascript

var app = (function(){ 
    $("body").append("should not append because it does not recognize jQuery"); 
})(); 

вместо

var app = (function(){ 
    $("body").append("should append because jQuery is recognized"); 
})(jQuery); 
+0

Там нет никакой разницы, так как вы не передаете аргумент. Можете ли вы уточнить, что вы пытаетесь сделать точно? – elclanrs

+0

это передает jQuery в качестве аргумента? – Emanegux

+1

jQuery не работает. Функция '$' является глобальным объектом. Вы не можете скрыть это от чего-либо, если вы включили jQuery –

ответ

0

расширяющейся на то, что сказал Насер, вы можете объявить (локально) вещи, которые вы хотите запретить, как неопределенные переменные:

// allow jQuery 
(function() { // don't overwrite $ or jQuery, so it's allowed, basically 
    $("body").append("should append because jQuery is recognized"); 
}()); 


// disallow jQuery 
(function ($, jQuery) { // declare $ and jQuery as undefined in the function scope 
    // the line below will throw an error, though 
    $("body").append("should not append because it does not recognize jQuery"); 
}()); 

вы можете еще больше расширить на этом, но это общая идея.

+1

. Это работает для jQuery но мне нужно явно указать, чего я не хочу, чтобы запустить функцию без ссылки на что-либо за ее пределами? – Emanegux

+1

Также, почему вы изменили круглые скобки orde r from (function() {})() to (function() {}())? – Emanegux

+0

Да, вам нужно явно указать, чего вы не хотите. Это JavaScript :) Я изменил круглую скобку только потому, что это мои предпочтения; оба работают одинаково хорошо. Есть еще несколько способов сделать это, но все равно результат. –

Смежные вопросы