Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Это старая версия документа!
Теги: JavaScript
(function () {
var size='750x200|300x250',
adunit = 'russianblogs.com_750x200_responsive_2_DFP',
childNetworkId = '22396446015',
xmlhttp = new XMLHttpRequest();xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState==4 && xmlhttp.status==200){var es = document.querySelectorAll("[data-id='"+adunit+"']");var e = Array.from(es).filter(function(e) {return !e.hasAttribute("data-rendered")});if(e.length > 0){e.forEach(function(el){var iframe = el.contentWindow.document;iframe.open();iframe.write(xmlhttp.responseText);iframe.close();el.setAttribute%%('%%data-rendered', true)})}}};var child=childNetworkId.trim()?','+childNetworkId.trim():%%''%%;xmlhttp.open("GET", 'https://pubads.g.doubleclick.net/gampad/adx?iu=/147246189'+child+%%'/'%%+adunit+'&sz='+encodeURI(size)+'&t=Placement_type%3Dserving&'+Date.now(), true);xmlhttp.send();})();
Статья из личного блогаhttps://knightyun.github.io/2020/03/13/js-comment-format, Пожалуйста, заявите
Как говорится, нет правила без правил; хотя код набирается и передается компилятору для интерпретации и выполнения, до тех пор, пока нет грамматических ошибок и ошибок форматирования, независимо от того, насколько античеловечен набор, нет проблем, но код - это еще одно широкое применение, помимо выполнения Просто прочтите его, просмотрите свой прошлый код, разберитесь в исходном коде других людей и т. Д., Так что существует стилизация кода, которая может улучшить внешний вид, но при этом его легко читать.
Конечно, помимо самого кода, дополнительное чтение может быть связано с комментариями к коду. Сами комментарии не будут компилироваться и выполняться компилятором, и их роль заключается в том, чтобы оставить некоторую информацию, чтобы облегчить лучшее понимание самого кода; поэтому прокомментированные Стандартизация - это тоже вопрос, над которым стоит подумать; и следующий вопрос будет представленJSDoc Это такой инструмент;
Согласно его официальному сайту (https://jsdoc.app/index.html) Введение, JSDoc - это генератор документов API для JavaScript, похожий на Javadoc в Java или phpDocumentor в PHP; добавьте комментарии в указанном формате в исходный код, и инструмент JSDoc автоматически просканирует ваш код и сгенерирует API Веб-сайт документа (сгенерировать связанные файлы веб-страницы в указанном каталоге);
Создание документации по API - это только один аспект. Его основной вклад заключается в стандартизации формата комментариев кода. Возможно, вы не использовали его, но большинство из вас где-то видели в исходном коде формат комментариев, подобный следующему:
/**
* Returns the sum of a and b
* @param {number} a
* @param {number} b
* @returns {number}
*/
function sum(a, b) {
return a + b;
}
123456789
Пользоваться инструментом очень просто, сначала установите его:
npm install -g jsdoc
1
Во-вторых, предположим, что вdoc.js Напишите в файл следующий код:
/**
* Returns the sum of a and b
* @param {number} a
* @param {number} b
* @returns {number}
*/
function sum(a, b) {
return a + b;
}
/**
* Return the diff fo a and b
* @param {number} a
* @param {number} b
* @returns {number}
*/
function diff(a, b) {
return a - b;
}
123456789101112131415161718
Затем выполните следующую команду в текущем каталоге:
jsdoc doc.js
1
Наконец, файл с именемout Содержимое текущего каталога станет следующим:
├── doc.js
└── out
├── index.html
├── doc.js.html
├── global.html
├── fonts
│ ├── OpenSans-BoldItalic-webfont.eot
│ ├── OpenSans-BoldItalic-webfont.svg
│ ├── OpenSans-BoldItalic-webfont.woff
│ ├── OpenSans-Bold-webfont.eot
│ ├── OpenSans-Bold-webfont.svg
│ ├── OpenSans-Bold-webfont.woff
│ ├── OpenSans-Italic-webfont.eot
│ ├── OpenSans-Italic-webfont.svg
│ ├── OpenSans-Italic-webfont.woff
│ ├── OpenSans-LightItalic-webfont.eot
│ ├── OpenSans-LightItalic-webfont.svg
│ ├── OpenSans-LightItalic-webfont.woff
│ ├── OpenSans-Light-webfont.eot
│ ├── OpenSans-Light-webfont.svg
│ ├── OpenSans-Light-webfont.woff
│ ├── OpenSans-Regular-webfont.eot
│ ├── OpenSans-Regular-webfont.svg
│ └── OpenSans-Regular-webfont.woff
├── scripts
│ ├── linenumber.js
│ └── prettify
│ ├── Apache-License-2.0.txt
│ ├── lang-css.js
│ └── prettify.js
└── styles
├── jsdoc-default.css
├── prettify-jsdoc.css
└── prettify-tomorrow.css
12345678910111213141516171819202122232425262728293031323334
Посетите это через браузерout Связанные веб-страницы в каталоге будут отображать контент, подобный следующим страницам;
Домашняя страница:

Шаблон стиля веб-страницы также можно заменить, просто измените его в соответствии с параметрами командной строки, я не буду рассматривать его здесь, давайте узнаем о формате его комментариев;
Пожалуйста, обратитесь к официальному веб-сайту для полного ознакомления с форматом (https://jsdoc.app/index.html), текущая версия - JSDoc 3. Ниже представлены только несколько часто используемых тегов и приведены примеры; конечно, если сложно написать кучу тегов, многие редакторы (например, VS Code) теперь предоставляют соответствующие загрузки подключаемых модулей непосредственно в подключаемом модуле. Будет много поисковых ключевых слов jsdoc, которые генерируются с подсказками или автоматически распознают текущий код, что очень удобно;
JSDoc использует следующий формат символов комментария для обертывания тегов, которые будут добавлены на уровне блока:
/** * * */
1234
То есть столбец звездочки выровнен по вертикали. Используйте две звездочки в первой строке и добавьте пробел после каждой звездочки перед записью содержимого, например:
/**
* Оставьте пробел перед описанием
* Или многострочное описание
* @param {number} описание параметра
*/
12345
Встроенный пакет:
/** @function */
1
Также можно написать@desc, Чтобы описать подробную информацию о текущем объекте аннотации;
/**
* @function
* @description о введении функции
*/
function myFn() {}
/**
* Вы также можете написать введение прямо здесь
* @function
* @description. Если вы продолжите использовать теги для добавления содержимого сюда, оно перезапишет вводное содержимое в первой строке.
*/
function myFn() {}
123456789101112
Комментарий записывается в начале файла, чтобы описать соответствующую информацию о текущем файле; например:
/** * @file Это файл для ..., содержит ... функции */ // Тогда тело кода ...
12345
Опишите соответствующую информацию об авторе текущего файла или кода;
/** * @author Jack <jack@example.com> */
123
Опишите информацию об авторских правах текущего файла
/** * @copyright Jack 2020 */
123
Опишите информацию, относящуюся к текущей лицензии на файл;
/** * @license MIT */
123
или:
/** * @license * Copyright (c) 2015 Example Corporation Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * ... */
123456789101112
Опишите номер версии текущего проекта;
/** * Эта версия исправляет ... проблемы * @version 1.2.3 */
1234
Опишите, в какой версии была введена функция;
/**
* Обеспечить ... функцию
* @since 1.2.1
*/
function newFn() {}
12345
Подобно значениям «см. Также» и «см. Подробно», вы также можете использовать его для навигации в другие места.@link Перейти к определенному сетевому адресу;
/**
* @see fn2
*/
function fn1() {}
/**
* @see {@link http://example.com|some text}
*/
function fn2() {}
123456789
Опишите, что делать дальше;
/**
* @todo add ... функция
* @todo fix ... ошибка
*/
function myFn() {}
12345
против @func, @method То же самое означает описание функции;
/** @function */
var myFn = function() {}
12
Опишите тип переменной;
/**
* Переменная типа объекта
* @type {object}
*/
var val1 = {};
/**
* Переменная символьного или числового типа
* @type {(string|number)}
*/
var val2;
/**
* Тип - числовой или пустой
* @type {?number}
*/
var val3;
/**
* Тип числовой или не может быть пустым
* @type {!number}
*/
var val4;
/**
* Массив экземпляров класса MyClass
* @type {Array.<MyClass>}
*/
var arr = new MyClass();
/**
* Массив строк
* @type {string[]}
*/
var arr2 = ['a', 'b', 'c'];
/**
* Объект, содержащий строку и числовой тип
* @type {object.<string, number>}
*/
var obj1 = {a: 'one', b: 2}
/**
* Укажите конкретные ключи и типы объектов
* @type {{a: string, b: number}}
*/
var obj2 = {a: 'one', b: 2}
/**
* Укажите конкретные ключи и типы именованных объектов
* @type {object} obj3
* @type {string} obj3.a
* @type {number} obj3.b
*/
var obj3 = {a: 'one', b: 2}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
против @arg, @argument То же самое означает описание информации о параметрах функции;
/**
* За меткой следует тип параметра, затем имя параметра и, наконец, описание параметра.
* @param {number} a Напишите здесь описание переменной
* @param {string} b- или добавьте дефис для удобства чтения
* @param {string} c-Или этот параметр имеет очень длинный, очень длинный
* Очень длинное, очень длинное, очень длинное, очень длинное, очень длинное описание, которое может занимать несколько строк
*/
function myFn(a, b, c) {}
/**
* Переданный параметр является объектом
* @param {object} option - параметр объекта, переданный в
* @param {строка} option.name - свойство имени объекта
* @param {number} option.age - свойство возраста объекта
*/
function myFn(option) {
var name = option.name;
var age = option.age;
}
/**
* Переданный параметр представляет собой массив строк
* @param {string []} arr - параметр входящего объекта
*/
function myFn(arr) {
var name = option.name;
var age = option.age;
}
/**
* Указывает, что параметр необязательный
* @param {number} a-это обязательный параметр
* @param {number} [b] - это необязательный параметр.
* @param {number =} c-другое представление необязательных параметров
*/
function myFn(a, b, c) {}
/**
* Указывает значение по умолчанию необязательного параметра
* @param {number} a
* @param {number} [b = 3] - значение по умолчанию 3
*/
function myFn(a, b) {}
/**
* Различные представления типов параметров
* @param {number} a-type - это число
* @param {number | string} b-тип - число или строка
* @param {? number} c-тип - число или null (null)
* @param {! number} d-тип - это число, а не пусто
* @param {*} e-Нет ограничений по типу, это может быть любой тип
*/
function myFn(a, b, c, d, e) {}
/**
* Означает функцию с любым количеством параметров
* Следующая функция возвращает сумму всех входящих параметров
* @param {... number} num - любое количество параметров, но все они имеют числовой тип
*/
function sum(num) {
var len = arguments.length;
var result = 0;
for (let i = 0; i < len; i++) {
result += arguments[i];
}
return result;
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
Используется для описания типов пользовательских переменных;
/**
* Описание нестандартного типа
* @typedef {(string|number)} myType
*/
/**
* Описание нестандартного типа
* @type {myType} val - использовать произвольный тип
*/
function myFn(val) {}
12345678910
Опишите информацию о параметрах указанной функции как функцию обратного вызова;
/**
* Это описание функции обратного вызова
* @callback myCallback
* @param {string} aa - параметры, принимаемые функцией обратного вызова
* @param {number} [bb] - еще один необязательный параметр, принимаемый функцией обратного вызова
*/
/**
* Это описание самой функции
* @param {string} a
* @param {myCallback} функция обратного вызова-обратного вызова
*/
function myFn(a, callback) {}
12345678910111213
Или напишите@return, Информация, описывающая возвращаемое значение функции;
/**
* @param {number} a
* @returns {number} описание возвращаемого значения
*/
function myFn(a) {
return a + 1;
}
/**
* @param {number} a
* @returns {(number | string)} Возвращаемое значение может быть числом или символьным типом.
*/
function myFn2(a) {
if (a > 1) {
return 1;
} else {
return 'no.';
}
}
12345678910111213141516171819
Опишите пример использования указанного кода;
/**
* Добавьте образец кода (формат будет выделен)
* @param {string} a
* @param {string} b
* @returns {string} return a concat b.
*
* @example
* console.log(myFn('hello ', 'world!'));
* // "hello world!"
*/
function myFn(a, b) {
return a + b;
}
12345678910111213
Опишитеclass учебный класс;
/**
* Описание категории
* @class
*/
class MyClass {}
/**
* Или конструктор
* @class
*/
function MyClass() {}
var ins = new MyClass();
123456789101112
Опишите пространство имен;
/**
* Укажите объект в пространстве имен
* @namespace
*/
var MyNamespace = {
/**
* Представлен как MyNamespace.fn
* @returns {*}
*/
fn: function() {},
/**
* Представлен как MyNamespace.a
* @type {number}
*/
a: 1
}
/**
* Вручную укажите пространство имен
* @namespace MyNamespace
*/
/**
* Функция-член MyNamespace.myFn
* @function
* @returns {*}
* @memberof MyNamespace
*/
function myFn() {}
12345678910111213141516171819202122232425262728
Описать член текущего класса;
/**
* @class
*/
function MyClass() {
/** @member {string} */
this.name = 'knightyun';
/**
* Или виртуальный участник
* @member {number} age
*/
}
123456789101112
Опишите класс, к которому принадлежит член;
/**
* @class
*/
class MyClass {
/**
* @constructor
* @memberof MyClass
*/
constructor() {}
/*
* @param {string} val
* @returns {*}
* @memberof MyClass
*/
myFn(val) {}
}
12345678910111213141516
Техническая статья push
Мобильный телефон, совместное использование компьютерных программ


(function () {
var size='728×90|300×250',
adunit = 'russianblogs.com_728x90_responsive_5_DFP',
childNetworkId = '22396446015',
xmlhttp = new XMLHttpRequest();xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState==4 && xmlhttp.status==200){var es = document.querySelectorAll(«[data-id='»+adunit+«']»);var e = Array.from(es).filter(function(e) {return !e.hasAttribute(«data-rendered»)});if(e.length > 0){e.forEach(function(el){var iframe = el.contentWindow.document;iframe.open();iframe.write(xmlhttp.responseText);iframe.close();el.setAttribute('data-rendered', true)})}}};var child=childNetworkId.trim()?','+childNetworkId.trim():'';xmlhttp.open(«GET», 'https://pubads.g.doubleclick.net/gampad/adx?iu=/147246189'+child+'/'+adunit+'&sz='+encodeURI(size)+'&t=Placement_type%3Dserving&'+Date.now(), true);xmlhttp.send();})();
Функция-член swap в контейнере В векторе контейнера пространство, занимаемое его памятью, только увеличивается, например, сначала выделяется 10 000 байт, а затем стираются следующие 9 999. Хотя сущест…
Просто смотрите этот вопрос, я не хочу это делать, я чувствую себя слишком просто. Отказ Отказ На самом деле, это также очень просто, это низкие руки. Неудачный код: #include <cstdlib> #include …
1. Установите зависимости и инструменты OpenCV. 2. Загрузите исходный код OpenCV и функции библиотеки и разархивируйте 3. Настройте среду Python. 4. Создайте виртуальную среду. 5. Включите виртуальную…
axios Во-первых, Axios Instruction Axios - это проект, независимый от VUE, основанный на обещании для браузера и Node.js, HTTP-клиента Может помочь нам завершить отправку запросов AJAX в вашем браузер…
Это долгая длинная история, введенная из PG 8.3, в кортеже, основная роль используется для уменьшения количества ввода / вывода, необходимого для обновлений, и обновление на основе принципов на основе…
После того, как редактор идей сам создаст новый проект maven, просто сделайте остальные следующим образом. Перед тем, как приступить к написанию учебного пособия, я создал проект maven для веб-разрабо…
Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child …
Формирование ISA ××× В последнее время в связи с бизнес-потребностями компании и реализацией в будущем резервного канала ×××, автору необходимо установить серверы &…
Каталог статей 1. Что такое массив 2. Определение и инициализация массива. 2.1, определение массива 2.2, статическая инициализация массива 2.3, динамическая инициализация 3. Операция с массивом 3.1, и…