JavaScript LHS и поиск в RHS

Я читал Scopes и Closure of You, не знаю JS книги Кайла Симпсона, в частности этот раздел Компилятор Speak.

Там они упоминают поиск LHS и RHS. Я не понимаю этих двух терминов, может ли кто-нибудь помочь мне реализовать их?

Ответ 1

Поиск LHS выполняется, когда в левой части операции присваивания появляется переменная, а просмотр RHS выполняется, когда переменная появляется в правой части операции присваивания.

Я думаю об этом следующим образом:
Поиск lhs - поиск контейнера
Поиск rhs - это поиск ценности

Ответ 2

Я думаю об этом следующим образом: Поиск lhs - это поиск контейнера Поиск rhs - это поиск ценности

Мне нравится, что Кайл Симпсон очень много подходит, но это конкретное объяснение в ореховой скорлупе привело к тому, что дом стал громким и понятным для меня.

Всегда существует торговля между "просто скажите, что мне нужно знать, ничего больше" и бурение, чтобы лучше понять на глубоком уровне.

Иногда такое глубокое понимание может помочь вам избежать неприятностей, отлаживать, писать тестовый код, оптимизировать и рефакторировать.

В настоящее время я читаю и смотрю много сочинений Кайла и онлайн-обучения, у него есть умение хорошо объяснять. Многие инструкторы теряют людей по пути, слишком быстро, потому что у них есть опыт, и им трудно замедлить - с другой стороны, если вы слишком основательны, разговор становится неинтересным, и вы просто настраиваетесь.

Ответ 3

LHS - Ищите идентификатор для назначения целей или для присвоения ему значения.

let foo;

// It looking for foo identifier in global scope and assign value
// So it an LHS 
foo = 1; 

// It also LHS as it assigning new value
foo = 2;

Теперь, RHS - это означает, что когда вы ищете идентификатор, чтобы использовать его (не назначать значение)

function foo() {
    alert(2);
}

// this look for an identifier called foo and 
// in global scope it a function decoration 
// and execute it
foo();

Ответ 4

Простой пример из той же книги, которую вы упомянули

function foo(a) {
console.log( a ); // 2
}
foo( 2 );

LHS: Когда вы передаете значение (2) методу foo, компилятор присваивает параметру значение a = 2, которое называется LHS Lookup. Он просто найдет переменную контейнера для присвоения значения.

RHS: Чтобы запустить console.log для печати a, нужна ссылка RHS для значения a. Это называется RHS Lookup

Другой пример

function foo(a) {
var b = a;
return a + b;
}
var c = foo( 2 );

3 LHS из приведенного выше примера - **

  1. c = (контейнер для хранения возврата метода foo)
  2. a = 2 (когда вы передаете значение 2 методу, компилятор назначит a = 2)
  3. б =

4 RHS из приведенного выше фрагмента кода

  1. foo (2) - нужна ссылка на a, чтобы получить значение
  2. = a - чтобы получить значение b, нужна ссылка на a
  3. а - чтобы получить значение а, нужна ссылка на
  4. b - чтобы получить значение b, нужна ссылка на b

Редактировать:

Ответ 5

Не думайте об этом как о назначении слева или справа, думайте об этом как о сохранении значения в памяти и получении его позже.

Например, когда вы вводите b в консоли разработчика Chrome, он запускает поиск RHS (получает значение b), а если значение не найдено, он вызывает ReferenceError.

Напротив, когда вы набираете b = 2 в консоли разработчика Chrome, он запускает поиск LHS, и если b не найден во вложенной области, JS-компилятор объявляет его в глобальной области (в зависимости от того, выполняете ли вы код в strict mode или не).

Например, примите во внимание следующий код

function foo(a) {
    console.log( a + b)
}

foo( 2 );