Javascript函数范围和从onclick调用

Javascript function scope and calling from onclick

本文关键字:onclick 调用 函数 范围 Javascript      更新时间:2023-09-26

使用JavasScript,假设在outerFunction()中定义了一个innerFunction()。如果您尝试在outerFunction()之外调用innerFunction(),则会出现错误,因为它未在范围内定义
然而,如果在outerFunction()中,您为某个外部元素(如button)分配innerFunction()给一个事件,例如单击事件,则可以从按钮的该范围调用innerFunction(),无论它是什么。那么,为什么您可以从不同的范围对innerFunction()进行第二次调用呢。

我有一个工作示例:http://jsfiddle.net/rcmoore38/gPrMk/

最初的changeColor()调用不起作用,但当changeColor()被分配给button时,可以通过按钮调用。

谢谢!

没有"按钮的作用域"。实际情况是,您从内部函数可见的范围中分配事件侦听器,这在JavaScript中才是最重要的。JS中的作用域是关于函数的声明位置。

在您的示例中:

$("#b").click(function() { changeColor() });

函数changeColor可以通过匿名函数内部的闭包获得,因为它是在外部作用域中声明的。当您定义嵌套函数时,父函数中的所有变量和函数都将在其中可用。因此,当单击元素并调用匿名函数时,它仍然引用changeColor,并且能够调用它。

您也可以在不使用闭包的情况下设置事件处理程序,如下所示:

$("#b").click(changeColor);

正如我所说,重要的是,当您引用时,changeColor就在作用域中(而不是当浏览器实际调用它时)。