Я читал Scopes и Closure of You, не знаю JS книги Кайла Симпсона, в частности этот раздел Компилятор Speak.
Там они упоминают поиск LHS и RHS. Я не понимаю этих двух терминов, может ли кто-нибудь помочь мне реализовать их?
Я читал Scopes и Closure of You, не знаю JS книги Кайла Симпсона, в частности этот раздел Компилятор Speak.
Там они упоминают поиск LHS и RHS. Я не понимаю этих двух терминов, может ли кто-нибудь помочь мне реализовать их?
Поиск LHS выполняется, когда в левой части операции присваивания появляется переменная, а просмотр RHS выполняется, когда переменная появляется в правой части операции присваивания.
Я думаю об этом следующим образом:
Поиск lhs - поиск контейнера
Поиск rhs - это поиск ценности
Я думаю об этом следующим образом: Поиск lhs - это поиск контейнера Поиск rhs - это поиск ценности
Мне нравится, что Кайл Симпсон очень много подходит, но это конкретное объяснение в ореховой скорлупе привело к тому, что дом стал громким и понятным для меня.
Всегда существует торговля между "просто скажите, что мне нужно знать, ничего больше" и бурение, чтобы лучше понять на глубоком уровне.
Иногда такое глубокое понимание может помочь вам избежать неприятностей, отлаживать, писать тестовый код, оптимизировать и рефакторировать.
В настоящее время я читаю и смотрю много сочинений Кайла и онлайн-обучения, у него есть умение хорошо объяснять. Многие инструкторы теряют людей по пути, слишком быстро, потому что у них есть опыт, и им трудно замедлить - с другой стороны, если вы слишком основательны, разговор становится неинтересным, и вы просто настраиваетесь.
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();
Простой пример из той же книги, которую вы упомянули
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 из приведенного выше примера - **
4 RHS из приведенного выше фрагмента кода
Редактировать:
Не думайте об этом как о назначении слева или справа, думайте об этом как о сохранении значения в памяти и получении его позже.
Например, когда вы вводите b
в консоли разработчика Chrome, он запускает поиск RHS
(получает значение b
), а если значение не найдено, он вызывает ReferenceError
.
Напротив, когда вы набираете b = 2
в консоли разработчика Chrome, он запускает поиск LHS
, и если b не найден во вложенной области, JS-компилятор объявляет его в глобальной области (в зависимости от того, выполняете ли вы код в strict mode
или не).
Например, примите во внимание следующий код
function foo(a) {
console.log( a + b)
}
foo( 2 );