Я наткнулся на эту статью, объясняющую javascript Quiz-Legend. В любом случае, это нормально, поэтому я хочу привести его сюда, чтобы все могли учиться, понять, читать и критиковать.
Вопрос 1
(function () {return typeof arguments; // "Object"}) ();Аргументы являются массивным объектом, соответствующим списку параметров переданной функции. Вы можете использовать эту переменную непосредственно в любой функции.
Оператор TypeOF вернет только результаты типа строки. Обратитесь к следующему списку, чтобы узнать, какое значение, возвращаемое TypeOF, является соответствующим различным данным:
Из этого мы делаем вывод, что аргументы типа являются объектом
Вопрос 2
var f = function g () {return 23; }; typeof g (); // Сообщать об ошибкеЭто выражение функции с именем g, а затем оно назначено переменной f.
Имя функции g здесь и переменная F, присвоенная ей, имеют следующие различия:
Имя функции g не может быть изменено, в то время как переменная F может быть переназначена
Имя функции G может использоваться только внутри корпуса функции. Если вы попытаетесь использовать G за пределами функции, сообщается об ошибке.
Вопрос 3
(function (x) {delete x; return x; // 1}) (1);Оператор удаления может удалить атрибуты из объекта, а правильное использование следующим образом:
Удалить Object.property
Удалить объект ['свойство']
Оператор удаления может использоваться только на свойствах объекта и является недействительным для переменных и имен функций. То есть DELETE X не имеет смысла.
Вам лучше знать, что Delete не выпустит память напрямую, это просто косвенно прерывает ссылку на объект
Вопрос 4
var y = 1, x = y = typeof x; x; // "неопределенное"
Мы стараемся разбить вышеупомянутый код на следующие два шага:
var y = 1; // Шаг 1
var x = y = typeof x; // Шаг 2
Не должно быть никаких возражений против первого шага, давайте посмотрим на второй шаг напрямую
1. Выражение назначения выполняется справа налево
2. Результат y переназначен на тип x, то есть неопределенное
3.x назначается как результат правого выражения (y = typeof x), то есть не определен
Вопрос 5
(функция f (f) {return typeof f (); // "number"}) (function () {return 1;});Прямой комментарий объяснение:
(Функция f (f) {// F здесь - это параметр, передаваемый в function () {return 1;} // Результат выполнения - это естественно 1 return typeOf f (); // Таким образом, в соответствии с рассматриваемой таблицей, мы знаем, что TypeOf 1 Результат - «number»}) (function () {return 1;});Вопрос 6
var foo = {bar: function () {return this.baz; }, baz: 1}; (function () {return typeof arguments [0] (); // "undefined"}) (foo.bar);Здесь вы можете ошибочно подумать, что конечным результатом является число. Передача параметров функции может рассматриваться как назначение, поэтому аргументы [0] получают значение реальной функции стержня, а не ссылку на foo.bar, поэтому, естественно, это будет указывать не на Foo, а окно.
Вопрос 7
var foo = {bar: function () {return this.baz; }, baz: 1} typeof (f = foo.bar) (); // "не определен"Это та же проблема, что и предыдущий вопрос. (f = foo.bar) возвращает значение бара, а не его ссылку, так что это не относится к Foo.
Вопрос 8
var f = (function f () {return '1';}, function g () {return 2;}) (); typeof f; // "номер"Оператор запятой оценивает каждый из своих объектов операции (слева направо) и возвращает значение последнего объекта операции.
Таким образом, возвращаемое значение (function f () {return '1';}, function g () {return 2;}) - это функция g, а затем выполнить его, тогда результат составляет 2; Наконец, TypeOF 2, согласно данной таблице, первой, результат, естественно, число
Вопрос 9
var x = 1; if (function f () {}) {x += typeof f;} x; // "1undefined"Ключевой момент этой проблемы, мы упомянули в вопросе 2, имя функции F в выражении функции не может быть доступно вне корпуса функции.
Вопрос 10
var x = [typeof x, typeof y] [1]; typeof typeof x; // "string" 1. Поскольку переменная y не была объявлена, typeof y возвращает "неопределенное"
2. Назначьте результат типа y к X, то есть x теперь "не определен"
3. Тогда Typeof x, конечно, "String"
4. Окончательный результат TypeOf "String", естественно, все еще "String"
Вопрос 11
(function (foo) {return typeof foo.bar; // "undefined"}) ({foo: {bar: 1}});Это чистый визуальный трюк, прокомментированный
(function (foo) {// Foo здесь {foo: {bar: 1}}, и нет атрибута Bar. // Атрибут Bar ниже foo.foo//so Результат здесь - «undefined» type typeof foo.bar;}) ({foo: {bar: 1}});Вопрос 12
(function f () {function f () {return 1;} return f (); // 2 function f () {return 2;}}) (););Функции, объявленные с помощью объявления функции, могут даже использоваться до объявления, что мы называем поднятой этой функцией. Таким образом, приведенный выше код на самом деле объясняется работой средой, подобной этим:
(function f () {function f () {return 1;} function f () {return 2;} return f ();}) ();Вопрос 13
Функция f () {return f; } new f () экземпляр f; // falseКогда код новый f () выполняется, произойдет следующее:
1. Создан новый объект. Он наследует от F.Prototype
2. Конструктор F выполняется. Во время исполнения будет проходить соответствующий проход, а контекст (это) будет указан как этот новый экземпляр. Новый F эквивалентен новому f () и может использоваться только в тех случаях, когда параметры не передаются.
3. Если конструктор возвращает «объект», то этот объект заменит результат всего нового. Если конструктор не возвращает объект, результатом нового является объект, созданный на шаге 1.
PS: При нормальных обстоятельствах конструктор не возвращает никакого значения, но если пользователь хочет перезаписать это возвращаемое значение, он может вернуть нормальный объект, чтобы перезаписать его. Конечно, возвращающиеся массивы также будут перезаписаны, потому что массивы также являются объектами.
Следовательно, новое f () мы здесь все еще возвращаем саму функцию F, а не ее экземпляр
Вопрос 14
с (function (x, undefined) {}) длина; // 2
Оператор с добавлением объекта в верхнюю часть цепочки прицела. Если в операторе есть переменная, которая не использовала пространство имен, которая имеет то же имя, что и свойство в цепочке областей, переменная будет указывать на значение свойства. Если есть недвижимость с тем же именем, будет выпущено исключение с ссылкой.
ОК, теперь давайте посмотрим на это, так как функция (x, не определенная) {} - это анонимное выражение функции, которое является функцией, оно будет иметь атрибут длины, который относится к количеству параметров функции. Итак, конечный результат 2
Написано в конце
Некоторые люди думают, что эти вопросы сложны, в то время как другие думают, что это расширяет их кругозор и зависит от их собственных мнений. Но одна вещь правда. Независимо от того, являетесь ли вы твердым практиком или нет, вы определенно не уйдете далеко без теоретического основания - вы никогда не увидите какого -либо квалифицированного технического работника, внезапно станет экспертом по ракетам.
Чтение документов, стандарты чтения и сочетание практики - это решающий способ для товарищей.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.