javascript - 对象字面量方法的范围

标签 javascript scoping

我目前正在做一些关于 JS 中的作用域和提升的实验。这里有两个例子,它们以不同的方式让我感到困惑。首先,我将一个匿名函数分配给一个名为 parent 的变量。显然返回的子函数可以访问它的外部函数作用域,因此它可以访问文本变量。这很清楚也很容易。这是代码..

var parent = function() {
    var text = 'i can access the container';
    return function() {
        alert(text);
    }
}();
parent();

后来我想返回一个对象而不是一个有方法的函数。这个方法不直接在立即调用函数的主体中,而是在返回的对象中定义。但它可以访问名为 private 的变量它包含一个字符串值。为什么这个变量在这个对象文字方法的范围内??

var parent = (function() {
    var text = 'private variable';
    return {
        prop: 'i am the property',
        method: function() {
            alert('i can access ' + text);
        }
    }
})();
parent.method();

最佳答案

在 JavaScript 中,对象文字不会创建新范围,只有函数会创建。因此,在 IIFE 中声明的所有变量都将可用于对象字面量中的 method 函数。

关于javascript - 对象字面量方法的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26447570/

相关文章:

javascript - 使用 observable 1 分钟后重复请求

r - 在循环中分配函数时的作用域问题

javascript - 在 Jqgrid 中搜索具有多个值的列中的值

javascript - 在 JavaScript 中以分层方式构建数据

javascript - d3.js。如何按值退出()?

python - Python 中的词法作用域

javascript - javascript 中的奇怪示例,为什么我无法通过函数的参数重新分配全局变量的值?

java - 在没有 http 请求的情况下,如何处理请求(套接字连接)bean 范围?

c++ - 为什么在嵌套的 FOR 循环中使用相同的计数变量名称有效?

javascript 在字符串中替换()