javascript - 不理解 Javascript 中的作用域

标签 javascript scope

我不太明白这段代码。

$('div').click((function () { 
    var number = 0;
    return function () {
        alert(++number);
    };
})());

我的理解是:

  • 定义了一个匿名函数并将其分配给点击处理程序。

  • 当我点击 div 时,会调用此函数。

函数的作用是:

  • 定义一个变量number = 0

  • 返回++number

那么,为什么每次单击时警报中的数字都会增加? number 不应该在我每次点击时重置为 0 吗?

最佳答案

这里有一个自调用函数,它返回一个函数。注意末尾的括号:

(function () { 
    var number = 0;
    return function () {
        alert(++number);
    };
})()

所以点击处理程序的回调只是返回的内部函数:

function () {
    alert(++number);
};

这个内部函数可以访问外部函数范围内的变量 number

所以你的代码也可以这样写:

function outerFunction() {
    var number = 0;
    return function () {
        alert(++number);
    };
};

var innerFunction = outerFunction();

$('div').click(innerFunction);

关于javascript - 不理解 Javascript 中的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22701012/

相关文章:

javascript - 如何将 mysql 行数据转换为 javascript 数组? Node.js 应用程序

javascript - `this` 上下文如何在立即自执行函数中工作?

javascript - 如果文本格式不正确,则在 ckeditor 中格式化 html

c++ - 字符串未在范围内定义。不确定为什么

c++ - C++ 中对局部变量使用的限制?

javascript - JavaScript 函数作用域如何处理参数?

javascript - updatepanel 触发后功能不起作用

javascript - 如何在特定位置替换字符串

ruby-on-rails - 嵌套 has_many 关系的范围

angularjs - 将一个范围分配给另一个范围 Angularjs