2016-06-14 75 views
0

我使用的內部變量呼叫可變

var MyFunction = (function() { 
     //...... 
    function FunctionToCall() { 
     //......  
    }; 
     //........ 
}(); 

這個函數中的功能,我想從外面變量調用FunctionToCall()與事件處理程序是這樣的:

$('div').click(FunctionToCall()); 

任何理念?

+4

,除非你將其提供給從裏面外面世界的你不能從外部訪問該功能。 – tkausl

回答

2

您可能錯過了一個return語句。
我想你打算是這樣的:

var myFunction = (function() { 
 
    var privateVar = 'Hello'; 
 
    
 
    return function innerFunction() { 
 
    return privateVar; 
 
    }; 
 
})(); 
 

 
console.log(myFunction());

另一種方式是與您要訪問的方法返回一個對象:

var myThing = (function() { 
 
    var privateVar = 'Hello'; 
 

 
    return { 
 
    innerFunction1: function() { 
 
     return privateVar; 
 
    }, 
 
    doSomething: function(newString) { 
 
     privateVar = newString; 
 
    } 
 
    }; 
 
})(); 
 

 

 
myThing.doSomething("Hi!"); 
 
console.log(myThing.innerFunction1());

之後,你可以在調整您的事件處理程序可訪問的任何內容。

-1

您正在代碼中聲明變量MyFunction的匿名函數。這將是未定義的。你不想在匿名函數中調用任何東西,因爲通常會立即調用匿名函數。

相反,聲明你FunctionToCall作爲外部變量,然後你可以把它定義您的匿名塊內像這樣

var FunctionToCall; 
(function() { 
    //...... 
    FunctionToCall = function() { 
     //......  
    }; 
    //........ 
}(); 

然後你就可以調用FunctionToCall。雖然我不認爲這是好習慣,但通常情況下,您希望在整個代碼中使用更高級別的函數。

0

你可以聲明一個靜態方法。因此,稱其爲MyFunction.FunctionToCall()

var MyFunction = function() { 
 
}; 
 

 
MyFunction.FunctionToCall = function() { 
 
    console.log('MyFunction.FunctionToCall called'); 
 
}; 
 

 
$(function() { 
 
    $('div').click(function() { 
 
     MyFunction.FunctionToCall() 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> 
 

 
<div>Click me</div>