javascript/jquery函数范围

Ala*_*ski 1 javascript jquery scope

 function onMouseClickFunction() {

    $mapCanvas.click(function (e) {
        var x = cursor.getCursorPositionInCanvasX(e.pageX),
            y = cursor.getCursorPositionInCanvasY(e.pageY);
Run Code Online (Sandbox Code Playgroud)

这个例子中的变量范围是函数onMouseclickFunction还是jquery的匿名函数?

我的意思是javascript在其父函数的顶部使用提升创建变量,那么在这个例子中提升的位置是什么?

Jos*_*ber 5

正确声明的每个变量将始终具有当前函数的局部范围.

由于您var正确使用了该语句,因此您的x和y变量是您的匿名函数的本地变量.


如果您希望能够从onMouseClickFunction函数中访问这些变量,则应在click事件处理程序之外声明它们.您仍然可以在单击处理程序中访问它们,因为该函数本身是在onMouseClickFunction函数内声明的.

这被称为JavaScript的范围链查找:如果您正在使用的变量尚未在本地范围内声明,JavaScript将在当前范围上方的范围内查找它(在您的匿名函数的情况下是外部的)onMouseClickFunction).如果它没有在那里宣布,它将一直向上看范围,直到它达到全球范围.

如果在范围链的任何地方都找不到该变量,则它将被声明为全局范围内的新变量.这就是为什么必须始终用var语句声明变量,就像你所做的那样.