Как определить функцию
1.
语法:function 函数名(参数1[,参数2]……){
函数体;
[return]; //返回值
}
function fx() {
}
function () {
} //匿名函数
2.字面量
var fn=function(){
}
3.通过函数对象方式
var x=new function () {
}
вызов функции
- Здесь это указывает на окно
//1、函数名();
function getSum() {
console.log(this) //window
}
getSum()
//2、自调用(function(){})()
(function() {
console.log(this) //window
})();
//3、变量名()
var getSum=function() {
console.log(this) //window
};
getSum()
Как создать экземпляр
//1.json方法
let obj={
name:"张山",
age:"11",
call:function(){
alert(1)
}
};
obj.call();
//2.构造函数方法
function Obj(){
this.name = "张三",
this.sex = "男",
this.phone = 17603514842,
this.call = function(){
alert(1);
}
}
let obj = new Obj();
obj.call();
//3.object方法
var obj = new Object();
obj.name = "张三";
obj.sex = "男";
obj.call = function(){
alert(this.name);
};
obj.call();
Типы данных JavaScript
- номер строки логическое значение null underfind object typeof (7 типов)
Что такое замыкание, каковы недостатки замыкания и когда его использовать
- Замыкание — это функция, вложенная в функцию, которую можно понимать как функцию, определенную внутри функции.По сути, замыкание — это мост между внутренней и внешней частью функции, но если на переменную, определенную родительской функцией, не ссылаются дочерней функцией это не называется замыканием.
- Замыкания удерживают переменные функции в памяти, что увеличивает потребление памяти. Неправильное использование может привести к утечке памяти.
- Назначение: читать переменные внутри функций, сохранять переменные в памяти, устанавливать частные переменные и методы.
Перегрузка функций и порядок разрешения
var m= 1, j = k = 0;
function add(n) {
return n = n+1;
  } ;
y = add(m);
function add(n) {
return n = n + 3;
} ;
z = add(m);
- Приведенный выше код выведет 4. В js нет концепции перегрузки функций, поскольку определена одна и та же функция, последняя перезапишет первую.
Таким образом, результат вызова add один и тот же, поэтому при фактическом выполнении кода, то есть при первом вызове add(), выводится, конечно, 4, и при втором выполнении add() также выводится 4.
Разница между добавлением скобок и не добавлением скобок при вызове функций js.Без скобок эквивалентно присвоению кода функции слева от знака равенства, а добавление скобок заключается в присвоении возвращаемого значения функции слева от знака равенства
var color='green';
var text={
color:'blue',
getColor:function() {
var color='red';
alert(this.color)
}
};
var getColor=text.getColor;
getColor();
text.getColor();
//结果为 green blue
Об этом указателе
- При прямом вызове это указывает на объект окна (здесь, если вы объявляете объект окна, это имя также указывает на внутри функции)
var name='张三';
function sayname() {
console.log(this.name)
};
sayname();
- Вызов функции объекта this указывает на сам объект
var name='Bob';
function sayName(){
console.log(this.name);
};
var object={'name':'vicky'};
object.sayName=sayName; //sayName没有写成sayName(),表示不是执行函数,而是将sayName的指针赋值给object.sayName
object.sayName(); //由于对象函数调用方法,this指向对象本身,所以输出:'vicky'
sayName(); //由于全局环境调用sayName()等同于window.sayName();输出:'Bob'
- Конструктор, вызывающий этот указатель, указывает на вновь созданный объект.
function object(name){
this.name=name;
console.log(this); //由于this指向新创建的对象本身,输出:Object { name: "vikcy" }
console.log(this.name); //输出:"vicky"
}
var myObject=new Object('vicky'); //由于this指向新创建的对象本身
Цепочка прототипов JavaScript
- Каждый объект будет инициализировать внутри себя свойство, которое является прототипом (прототипом).Когда мы обращаемся к свойствам объекта,
Если этого свойства у объекта нет, то он пойдет к прототипу, чтобы найти это свойство, и у этого прототипа будет свой прототип.
Поэтому мы продолжаем искать его, что и является концепцией цепочки прототипов, которую мы обычно называем.
Сколько типов значений имеет JavaScript?
- Стек: примитивные типы данных (неопределенный, нулевой, логический, числовой, строковый)
- Куча: ссылочные типы данных (объекты, массивы и функции)
Разница между двумя типами заключается в следующем: место хранения отличается;
Примитивный тип данных — это простой сегмент данных, хранящийся непосредственно в стеке, занимает мало места и имеет фиксированный размер, относится к часто используемым данным, поэтому хранится в стеке;
Ссылочный тип данных — это объект, хранящийся в куче, который занимает большое пространство и имеет переменный размер. Если хранить в стеке, это повлияет на производительность программы; количество ссылок
Тип хранит в стеке указатель, указывающий на начальный адрес объекта в куче. Когда интерпретатор ищет ссылочное значение, он сначала извлекает его адрес в стеке, принимая
Получить сущность из кучи после получения адреса
Любой объект, преобразованный в логическое значение, должен получить значение true (помните! В JS только 0, -0, NaN, "", null, undefined преобразуются в логические значения, и результат - false)
var x = new Boolean(false);
if (x) {
alert('hi');
}
var y = Boolean(0);
if (y) {
alert('hello');
}
//结果只会显示 hi
переменное продвижение
- В области действия оператор объявления переменной будет объявлен в самом начале области действия по умолчанию.
var a=5;
function foo() {
a=2;
console.log(a);
var a;
}
foo();
//结果会输出2
- Мы видим, что оператор var a; не обновляет значение a, потому что при синтаксическом анализе и компиляции «var a;» продвигается вперед. Таким образом, мы видим, что a — это внутренняя переменная a вместо присвоенной 5 внешней.
var a=5;
function foo() {
console.log(a);
var a=1;
}
foo();
//结果输出underfind
- Так как a было объявлено для расширения переменной, то 5, объявленное нами извне, не выводится, а a=1; не выполняется заранее, поэтому концепция продвижения переменной применима только к объявлению переменных.
оператор, и операторы присваивания переменных не могут быть расширены
foo();
function foo(){
console.log(1);
}
//TypeError: foo is not a function
- Здесь поднимается foo, поэтому ReferenceError нет, но в это время foo не присваивается, поэтому возникает TypeError. Этот код после бустинга выглядит так:
var foo;
foo();
foo=function fooo() {
console.log(1)
}
- Мы привыкли думать о «var a=5» как об утверждении. На самом деле два утверждения здесь являются сокращенными, 'var a' и 'a = 3', и на самом деле эти два утверждения являются двумя разными типами утверждений, состоящими из двух разных
компоненты завершены. Первое предложение выполняется на этапе компиляции, а второе — на этапе выполнения. Итак, где бы ни была написана 'var a', она будет обработана до того, как будет выполнен сам код. Процесс аналогичен
Это процесс перемещения кода, поэтому он называется «переменным продвижением».
Что происходило с браузером от ввода URL до завершения загрузки
1. Введите URL-адрес в адресную строку браузера.
2. Браузер сначала проверит кеш браузера — системный кеш — кеш маршрута, если есть кеш, он будет отображаться напрямую. Если нет, перейдите к шагу 3
3. Разрешение доменного имени (DNS) для получения соответствующего ip
4. Браузер инициирует tcp-соединение с сервером и устанавливает трехстороннее рукопожатие tcp с браузером.
5. Рукопожатие прошло успешно, и браузер отправляет http-запрос на сервер, запрашивая пакет данных
6. Сервер запрашивает данные и возвращает данные браузеру.
7. Браузер получает ответ, читает содержимое страницы, анализирует исходный код html и создает DOM-дерево.
8. Разбираем стиль css, рендеринг в браузере, взаимодействие с js
Общие ядра браузера
Гугл: -вебкит- Фаерфокс: -моз- то есть: -мс- Оу Пэн: -о- Браузер QQ: двухъядерный -webkit- -ms-
Работа узла
-
создать узел
createDocumentFragment() //Создаем фрагмент DOM
createElement() //Создать определенный элемент
createTextNode() //Создать текстовый узел -
добавить, удалить, заменить, вставить
appendChild() // добавить
removeChild() //Удалить
replaceChild() //заменить
insertBefore() //Вставить -
найти
getElementsByTagName() //По имени тега
getElementsByName() // Передаем значение свойства Name элемента
getElementById() //По идентификатору элемента, уникальный
сфера
- У каждой функции есть область видимости.Например, если мы создаем функцию, а функция содержит функцию, то теперь есть три области видимости, так что цепочка областей действия формально параметризуется.
- Особенности: Сначала выполните поиск в собственной области видимости переменных, если вы не можете ее найти, вы найдете ее в цепочке областей видимости.