我目前正在做一些关于 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/