Javascript 访问嵌套在YUI代码块中的函数

Javascript 访问嵌套在YUI代码块中的函数,javascript,closures,yui,Javascript,Closures,Yui,在下面的代码段中,我试图访问YUI块中的testFunction()。 正确的做法是什么 var obj = YUI().use('node', 'event', 'io-base', 'json-parse', function(Y){ function testFunction() { console.log('Inside Function'); } }); obj.testFunction(); 您的代码当前无法工作有两个原因 首先,您声明的testF

在下面的代码段中,我试图访问YUI块中的
testFunction()
。 正确的做法是什么

var obj = YUI().use('node', 'event', 'io-base', 'json-parse', function(Y){
    function testFunction() {
        console.log('Inside Function');
    }
});

obj.testFunction();

您的代码当前无法工作有两个原因

首先,您声明的testFunction函数将不可见。将代码更改为

var obj = YUI().use('node', 'event', 'io-base', 'json-parse', function(Y){
    Y.testFunction = function() {
        console.log('Inside Function');
    }
});
修正了那个部分。传递给函数的Y将从YUI.use()返回,因此将其分配给Y使其可见

第二个问题是,对obj.testFunction()的调用将在YUI加载所需的模块之前发生,因此此时,obj(YUI的实例)中不会包含testFunction。如果对上面的代码进行更改,您将能够在浏览器控制台中调用obj.testFunction(),因为它将在该点加载

最好的办法是将testFunction放入一个模块中,然后在以后的代码中使用该模块:

YUI.add('testFunction', function (Y) {
   Y.testFunction = function() {
        console.log('Inside Function');
    };
}, '1.0.0', {
    requires: ['node', 'event', 'io-base', 'json-parse']
});

var obj = YUI().use('testFunction', function(Y){
      Y.testFunction();
});