Как загружается объект javascript и функция javascript на этапе создания контекста выполнения? - PullRequest
0 голосов
/ 10 июля 2019

Я все еще изучаю странные части JavaScript и столкнулся с этой проблемой.

Я знаю, что все переменные изначально установлены как неопределенные на этапе создания контекста выполнения, но функции загруженыв памяти во всей их полноте.И все функции являются объектами в JavaScript.Поэтому, когда я пишу следующий код, он не дает удовлетворительного результата.

//Code-1

console.log(fun1.exp);
function fun1(){
    console.log("Hi");
}
fun1.exp = "funnn";



//Code-2

console.log(obj.name);
var obj = {
    "name" : "Albert"
};

Вывод из Code-1:

undefined

Вывод из Code-2:

Uncaught TypeError: Невозможно прочитать свойство 'name' из неопределенного

Ожидается: если оба объекта являются объектами, не должны ли их выходные данные быть одинаковыми?

1 Ответ

1 голос
/ 10 июля 2019

Объявления функций поднимаются, но все, что связано с присваиванием (=), не является.Для переводчика ваш первый код эквивалентен

function fun1(){
  console.log("Hi");
}
// END OF HOISTING OF FUNCTION DECLARATIONS

console.log(fun1.exp);
fun1.exp = "funnn";

Строка fun1.exp идет после console.log, поэтому fun1.exp равно undefined при регистрации.

Ваш второйкод эквивалентен

// END OF HOISTING OF FUNCTION DECLARATIONS
// (no hoisting at all here, since there are no function declarations)

console.log(obj.name);
var obj = {
  "name" : "Albert"
};

Обычные объекты не поднимаются;только объявления функций (функции, которые используют ключевое слово function и не имеют =):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...