JavaScript-это язык сценариев, который поддерживает расширенные функции, такие как функциональное программирование, закрытие, прототип, наследство и т. Д. JavaScript, кажется, легко начать работу, но, поскольку вы используете его глубину, на самом деле трудно освоить Javascript, и некоторые основные концепции невероятны. Среди них ключевое слово это в JavaScript является относительно запутанной концепцией. В разных сценариях это станет разными объектами. Существует мнение, что только при правильном освоении этого ключевого слова в JavaScript вы можете ввести порог языка JavaScript. На основных объектно-ориентированных языках (таких как Java, C#и т. Д.) Это означает ясное и конкретное, то есть указывает на текущий объект. Обычно связано в период компиляции. Это связано во время выполнения в JavaScript, что является важной причиной, по которой это ключевое слово имеет несколько значений в JavaScript.
Из -за своей функции привязки во время выполнения, это в JavaScript может быть глобальным объектом, текущим объектом или любого объекта, который полностью зависит от того, как называется функция. В JavaScript есть несколько способов вызвать функции:
Называется как объектный метод;
как вызов функции;
Называется как конструктор;
Используйте применить или позвонить, чтобы позвонить.
Как говорится, персонаж не так хорош, как форма, и форма не так хороша, как картина. Чтобы люди лучше понять, на что это указывает на JavaScript? Вот картина, чтобы объяснить:
На рисунке выше я называю это «JavaScript это дерево решений» (в не-стройном режиме). Ниже приведен пример, чтобы проиллюстрировать, как эта цифра может помочь нам судить это:
var point = {x: 0, y: 0, moveto: function (x, y) {this.x = this.x + x; this.y = this.y + y; }}; // Объяснение дерева решений: функция point.moveto (1,1) не требуется для нового, входит в вето, // она вызывается с точкой (.), А затем указывает на объект вызова до .moveto, то есть pointpoint.moveto (1,1); // это связано с текущим объектом, то есть точечный объектЯвляется ли вызов функции Point.moveto, вызванный новым? Это, очевидно, нет. Входя в ветвь «Нет», то есть функция, называемая точкой (.)? ;
Функция точки. Мовето вызывается с помощью точки (.), То есть она входит в ветвь «да», то есть это здесь указывает на точку объекта до точки.
Диаграмма анализа того, к чему эта точка в точке рисунка. Функция Moveto показана на следующем рисунке:
Давайте приведем еще один пример, посмотрите на следующий код:
функция func (x) {this.x = x; } func (5); // Это глобальное окно объекта, x - глобальная переменная // Анализ дерева решений: функция func () вызывается с новой? Нет, это вызвано DOT при входе в функцию func ()? Нет, это указывает на Global Object Windowx; // x => 5Процесс определения функции func () в «javaScript Это дерево решений» выглядит следующим образом:
Вызов функции Func (5) вызовом с новым? Это, очевидно, нет. Входя в ветвь «Нет», то есть функция, называемая точкой (.)? ;
Функция func (5) не вызывается с помощью точки (.), То есть она входит в ветвь «нет», то есть эта точка в окно глобальной переменной, то это на самом деле это.
Диаграмма анализа того, на что указывает эта функция Func, показана на следующем рисунке:
Для метода вызова напрямую в качестве функции давайте посмотрим на сложный пример:
var point = {x: 0, y: 0, moveto: function (x, y) {// Внутренняя функция var movex = function (x) {this.x = x; // Что это указывает? окно}; // внутренняя функция var movey = function (y) {this.y = y; // Что это указывает? окно}; movex (x); Двигатель (Y); }}; point.moveto (1,1); point.x; // => 0 point.y; // => 0 x; // => 1 y; // => 1Фактический внутренний вызов функций movex () и movey (). Процесс определения этого внутри функции movex () в «JavaScript Это дерево решений» выглядит следующим образом:
Вызов функции Movex (1) вызывается с новым? Это, очевидно, нет. Входя в ветвь «Нет», то есть функция, называемая точкой (.)? ;
Функция MOVEX (1) не вызывается с помощью DOT (.), То есть она входит в ветвь «нет», то есть это здесь указывает на окно глобальной переменной, то это на самом деле это.
Давайте посмотрим на пример вызова конструктора:
Функциональная точка (x, y) {this.x = x; // этот ? this.y = y; // это?} var np = новая точка (1,1); np.x; // 1var p = точка (2,2); px; // ошибка, p - пустой объект undefinedwindow.x; // 2Процесс определения этого в «JavaScript Это дерево решений» в функции точки (1,1) выглядит следующим образом:
var np = new The Point (1,1) вызов вызывается с новым? Очевидно, что это входит в ветвь «да», то есть это указывает на NP;
Тогда это .x = 1, то есть np.x = 1;
Процесс определения этого в «javaScript Это дерево решений» функции точки (2,2) в var p = точка (2,2) выглядит следующим образом:
Вызов VAR P = Point (2,2) вызывается с новым? Это, очевидно, нет. Входя в ветвь «Нет», то есть функция, называемая точкой (.)? ;
Является ли точка (2,2) функция не вызывается с помощью точки (.)? Определяется как нет, то есть введите ветвь «нет», то есть, это указывает на окно глобальной переменной, тогда это на самом деле является window.x;
This.x = 2 означает window.x = 2.
Наконец, давайте посмотрим на пример вызова функций с вызовом и применить:
Функциональная точка (x, y) {this.x = x; this.y = y; this.moveto = function (x, y) {this.x = x; this.y = y; }} var p1 = новая точка (0, 0); var p2 = {x: 0, y: 0}; p1.moveto.apply (p2, [10, 10]); // Применить на самом деле p2.moveto (10, 10) p2.x // 10Процесс определения функции p1.moveto.apply (p2, [10,10]) в «JavaScript Это дерево решений» выглядит следующим образом:
Мы знаем, что эти два метода применяются и вызов чрезвычайно мощными, и они позволяют переключать контекст выполнения функции, то есть объект, связанный с этим. P1.Moveto.Apply (P2, [10,10]) на самом деле является p2.moveto (10,10). Тогда P2.moveto (10,10) можно интерпретировать как:
Вызов функции вызывается с новым? Это, очевидно, нет. Входя в ветвь «Нет», то есть функция, называемая точкой (.)? ;
Функция P2.moveto (10,10) вызывается с помощью Dot (.), То есть она входит в ветвь «Да», то есть это здесь указывает на объект P2 в p2.moveto (10,10). Раньше, так что P2.x = 10.
Что касается процесса среды выполнения функций JavaScript, описание в библиотеке документов IBM DeveloperWorks кажется очень хорошим, а выдержка выглядит следующим образом:
«Функции в JavaScript могут выполняться как обычные функции или как объекты, что является основной причиной, по которой это настолько богато. Когда функция выполняется, создается среда выполнения (выполнение контекста), и все поведения функции происходят в этой среде выполнения. При создании среды выполнения, Javascript сначала, переменная аргументы будут созданы, которые будут созданы, которые содержится в следующем нанесении на нанесение нанесения напользу. Переменная, сначала инициализируйте формальную таблицу параметров, значение является соответствующим значением в переменной аргументов. Операция назначения будет выполнена только тогда, когда функция выполняется после того, как мы очень важны. Создано, и функция начинает выполнять строку, и требуемые переменные считываются из среды выполнения (выполнение контекста), которая была построена ранее.
Понимание этого отрывка будет полезным для понимания функций JavaScript.