2016-06-17 3 views
-2

Я изучаю javascript, и мое текущее понимание - это основной способ использования javascript для области видимости - это область функций, и в целом нет областей блоков.Какова область видимости в объектных литералах.

Так что я пришел с этим:

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

 
myfunc();

Я думал, потому что Javascript не имеет блок области видимости, определение myfunc() будет виден в глобальном масштабе. Но на самом деле этого не произошло. Может кто-нибудь помочь объяснить это?

+0

Вы знаете, что можете получить к нему доступ через 'obj.foo()', правильно? – Bergi

+0

Вы не можете просто выполнить myFunc(), а скорее obj.foo() – dangor

+2

Это выражение функции. Он никогда не становится доступным ни в какой области. – Bergi

ответ

1

Есть три точки, где ваше понимание является ошибочным:

  • JavaScript делает есть блок области с момента ES6.
  • Объектные литералы не являются блоками, они не вводят никаких областей.
  • Ваша функция не становится глобальной, потому что это не объявление (которое является синтаксически недействительным внутри объекта), а выражение функции, которое просто создает именованный функциональный объект, который затем присваивается свойству foo вновь созданного объекта , См. var functionName = function() {} vs function functionName() {}.
+0

Спасибо :) На самом деле не понимаю, почему люди голосуют ... – shengy

+2

@shengy: The downvote означает «* Этот вопрос не показывает никаких исследований, он неясен или не полезен *». – Bergi

+0

неважно, спасибо за разъяснение. – shengy

Смежные вопросы