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