2014-11-02 48 views
0

我有以下功能:如何调用里面的函数,你可以通过这个访问参数?

function outer(){ 
    index = 1; 
    inner(); 
} 

function inner(){ 
alert(this.index); 
} 

我想看看1警报。另外我想要那个函数内部没有参数。

可能吗?

+0

'this'是用于访问对象的属性,而不是访问本地变量。除非将所有变量放入对象并传递对象引用,否则JavaScript不提供通过对象引用访问局部变量的方法。 – jfriend00 2014-11-02 23:44:32

回答

5

您可以手动Function.prototype.call

function outer() { 
    this.index = 1; 
    inner.call(this);  
} 
+0

但是如果inner有一个参数,它就不起作用。你能以这种方式提出建议吗? – gstackoverflow 2014-11-02 23:46:48

+0

你想要传入内部? – 2014-11-02 23:50:37

+0

“调用”函数与使用正常语法调用它不同。请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call - 您可以在这里看到一个工作示例:http://jsfiddle.net/r77gg0t4/ – Fiddles 2014-11-02 23:52:22

0

调用函数时,如果定义了outer()功能范围之外的index变量指定的背景下,这将是提供给两种功能。

var index = 0; 

function outer() { 
    index = 1; 
    inner(); 
} 

function inner() { 
    alert(index); 
} 

outer(); // alerts "1" 
0

您可以使用应用函数的对象,这将控制方面:

function blarg() { 
    var self = this; 

    self.outer = function(){ 
     self.index = 1; 
     self.inner(); 
    }; 

    self.inner = function(){ 
     alert(self.index); 
    }; 

    self.outer();  // Call it in the constructor 

    self.go = function() { 
     self.outer();  // Or in another function 
    }; 
} 

var blargObj = new blarg(); 
blargObj.go(); 
+1

您的代码只适用于您将索引添加到全局对象。您会发现,在浏览器中执行代码时,window.index = 1,并且从新blarg()创建的上下文没有索引属性。 – 2014-11-02 23:54:48

+0

谢谢@Steven。总是要小心,假设“这”实际上是什么。 – Fiddles 2014-11-03 00:10:05

相关问题