Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript/jquery函数作用域_Javascript_Jquery_Scope - Fatal编程技术网

javascript/jquery函数作用域

javascript/jquery函数作用域,javascript,jquery,scope,Javascript,Jquery,Scope,本例中的变量范围是什么?它是mouseClickFunction函数还是jquery的匿名函数 重要的是javascript使用提升在其父函数的顶部创建变量,因此在本例中提升在何处完成?正确声明的每个变量将始终具有当前函数的局部范围 由于正确使用了var语句,因此x和y变量是匿名函数的局部变量 如果您希望能够从onMouseClickFunction函数访问这些变量,那么应该在click事件处理程序之外声明它们。您仍然可以从click处理程序中访问它们,因为该函数本身是在onMouseClick

本例中的变量范围是什么?它是mouseClickFunction函数还是jquery的匿名函数


重要的是javascript使用提升在其父函数的顶部创建变量,因此在本例中提升在何处完成?

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

由于正确使用了var语句,因此x和y变量是匿名函数的局部变量

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

这被称为JavaScript的作用域链查找:如果您正在使用的变量没有在本地作用域中声明,JavaScript将在当前作用域之上的作用域中查找它,在匿名函数的情况下,该作用域是外部onMouseClickFunction。如果它也没有在那里声明,它将继续向上查找范围,直到到达全局范围


如果在作用域链中的任何位置都找不到该变量,则该变量将在全局作用域中声明为新变量。这就是为什么必须始终使用var语句声明变量的原因,正如您所做的那样。

正确声明的每个变量都将始终具有当前函数的局部作用域

由于正确使用了var语句,因此x和y变量是匿名函数的局部变量

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

这被称为JavaScript的作用域链查找:如果您正在使用的变量没有在本地作用域中声明,JavaScript将在当前作用域之上的作用域中查找它,在匿名函数的情况下,该作用域是外部onMouseClickFunction。如果它也没有在那里声明,它将继续向上查找范围,直到到达全局范围


如果在作用域链中的任何位置都找不到该变量,则该变量将在全局作用域中声明为新变量。这就是为什么必须始终使用var语句声明变量的原因,正如您所做的那样。

假设您指的是变量x和y,那么它就是传递给click的匿名函数

var始终作用于当前函数

重要的是javascript使用提升在其父函数的顶部创建变量,那么在本例中提升是在哪里完成的呢

提升意味着当您使用var时,变量的作用域将被限定为函数,即使您以前尝试过使用它

i、 e

如果调用了内部函数,它将发出未定义的警报,因为var x=2在内部函数var被挂起的范围内创建了一个新的x,但是由于分配未被挂起,因此直到发出警报之后才发生分配


问题中的所有var语句都出现在它们出现的函数的顶部,因此提升没有什么区别。

假设您指的是变量x和y,那么它就是传递给click的匿名函数

var始终作用于当前函数

重要的是javascript使用提升在其父函数的顶部创建变量,那么在本例中提升是在哪里完成的呢

提升意味着当您使用var时,变量的作用域将被限定为函数,即使您以前尝试过使用它

i、 e

如果调用了内部函数,它将发出未定义的警报,因为var x=2在内部函数var被挂起的范围内创建了一个新的x,但是由于分配未被挂起,因此直到发出警报之后才发生分配


问题中的所有var语句都出现在它们出现的函数的顶部,因此提升没有什么区别。

后面的是匿名函数,因为在匿名函数中声明变量。

后面的是匿名函数,因为这是声明变量的函数。

这里创建的是一个函数


因此,匿名函数将继承onMouseClickFunction的作用域,但变量x和y仅在匿名函数的作用域中。

此处创建的是一个


因此,匿名函数将继承onMouseClickFunction的作用域,但变量x和y仅在匿名函数的作用域内。

如果提升是您所追求的,请在此处查看我的答案:如果提升是您所追求的,请在此处查看我的答案:
 function onMouseClickFunction() {

    $mapCanvas.click(function (e) {
        var x = cursor.getCursorPositionInCanvasX(e.pageX),
            y = cursor.getCursorPositionInCanvasY(e.pageY);
function () {
    var x = 1;

    function () {
         alert(x);
         var x = 2;
    }
}