2012-01-05 61 views
1
S.ui.createpulldown = function() { 
    function someName(){ 
    } 
    someName() // gets called 
} 
someName() // does not get called, when outside because of scope issue. 

我想在s.ui.createpulldown函数之外调用这个函数。是否有可能,在什么样的变化,我必须做出function someName()另一个功能里面的调用函数

+0

为什么不在外面定义'someName'呢? – 2012-01-05 15:24:49

回答

3

您必须将功能分配给一个变量,在所需范围可见:

//... 
var someName; 
S.ui.createpulldown = function() { 

    someName = function(){ 

    } 

    someName() // gets called 

} 
someName(); // gets called also 
//... 

,或者如果你希望它是一个全球性的变量(在所有范围内可见),你可以将其固定到窗口对象:

window.someName = function(){}; 

注意,这将S.ui.createpulldown函数的执行(THX,pimvdb)后才能正常工作。

+1

现在它不会被调用。你必须首先执行'createpulldown'。 – pimvdb 2012-01-05 14:45:11

3

这是一个范围界定问题。如果你想somename到五个功能外部可见你需要外界声明它,或者把它传给你不能访问somefunction因为它是createPullDown一个局部变量,就像i在下面的例子中

function pulldown(){ 
    for(var i=0; i<n; i++){ ... } 
} 

i; //can't use "i" here! 

在外面可见的人或设置在外面可见的物体的属性;

var someFunction; 
var someObj = {}; 

S.ui.createpulldown = function() { 

    function someName(){ 

    } 

    someFunction = someName; 
    someObj.func = someName; 

} 

S.ui.createpulldown(); 

someFunction(); 
someObj.func(); 
+0

如果someName()函数有另一个onload函数...那不被调用。 – theJava 2012-01-05 15:29:30

0

move somename在定义它的函数之外。如果您打算在多个地方使用它,请将其放在命名空间的相应部分。

0

您不能在s.ui.createpulldown功能以外调用功能someName()

相关问题