对象文字定义的范围是什么。

时间:2016-06-17 15:47:48

标签: javascript scope

我正在学习javascript,我目前的理解是javascript用于范围界定的主要方式是函数范围,并且通常没有块范围。

所以我想出了这个:

var obj = {
  foo: function myfunc() {
    console.log("123");
  }
};

myfunc();

我认为因为javascript没有块范围,myfunc()的定义将在全局范围内可见。但它实际上没有。有人可以帮忙解释一下吗?

1 个答案:

答案 0 :(得分:1)

有三点你的理解存在缺陷:

  • JavaScript 确实具有自ES6以来的块范围。
  • 对象文字不是块,它们不引入任何范围。
  • 你的函数不是一个全局因为它不是一个声明(在一个对象中语法无效),而是一个函数表达式,只是创建一个命名的函数对象,然后将其赋值给foo属性新创建的对象。有关详细信息,请参阅var functionName = function() {} vs function functionName() {}