Определение функции и вызов
Определение функций. В JavaScript способ определения функций заключается в следующем:
Функция ABS (x) {if (x> = 0) {return x;} else {return -x;}}Указанная функция ABS () определяется следующим образом:
Функция указывает, что это определение функции;
ABS - это имя функции;
(x) Перечислите параметры функции в скобках, разделенных несколькими параметрами;
Код между {...} является корпусом функции, который может содержать несколько операторов или даже без какого -либо оператора.
ПРИМЕЧАНИЕ. При выполнении оператора внутри корпуса функции, как только он выполнен для возврата, функция выполняется и результат возвращается. Следовательно, внутреннее определение и цикл могут быть реализованы очень сложными.
Если нет оператора возврата, результат будет возвращен после выполнения функции, но результат не определен.
Поскольку функция JavaScript также является объектом, функция ABS (), определенная выше, на самом деле является функциональным объектом, и имя функции ABS можно рассматривать как переменную, указывающую на функцию.
var abs = function (x) {if (x> = 0) {return x;} else {return -x;}}Таким образом, функция (x) {...} - это анонимная функция, которая не имеет имени функции. Однако эта анонимная функция назначается переменной ABS, поэтому функцию можно вызвать через переменную ABS.
Два определения полностью эквивалентны. Обратите внимание, что второй метод должен добавить один в конце корпуса функции в соответствии с полным синтаксисом, указывая, что оператор назначения заканчивается.
При вызове функции просто передайте параметры по порядку:
ABS (10); // возврат 10
ABS (-9); // возвращение в 9
Поскольку JavaScript позволяет передавать любой параметр без затрования, нет проблем с тем, что передается больше параметров, чем определенные параметры, хотя эти параметры не требуются в рамках функции.
ABS (10, 'blablabla'); // возврат 10
ABS (-9, «хаха», «хе-хе», null) // возвращение в 9
Нет проблем с меньшим количеством параметров, чем определено
abs (); Вернуть Нэн
В настоящее время параметр x функции ABS (x) получит неопределенную, а результат расчета - NAN
Функция abs (x) {if (typeof x! == 'number') {throw 'не число':} if (x> = 0) {return x;} else {return -x;}}аргументы
JavaScript также имеет бесплатные аргументы ключевых слов, которые работают только внутри функции и всегда указывают на все параметры, передаваемые вызывающим абонент текущей функции.
функция foo (x) {alert (x); // 10for (var i = 0; i <argents.length; ++) {alert (аргументы [i]); // 10,20,30}} foo (10.20,30)С аргументами вы можете получить все параметры, передаваемые абонентом. То есть, даже если функция не определяет каких -либо параметров, значение параметра все еще может быть получено:
function abs () {if (arguments.length === 0) {return 0;} var x = аргументы [0] return x> = 0? x: -x;} abs (); // 0abs (10); // 10abs (-9) // 9Фактически, аргументы чаще всего используются для определения количества входящих параметров. Вы можете увидеть это письмо:
// foo (a [, b], c)
// Принять 2 ~ 3 параметры, B является дополнительным параметром. Если введены и выходят только два параметра, B по умолчанию является нулевым по умолчанию
Функция foo (a, b, c) {if (arguments.length === 2) {// Фактические полученные параметры являются a и bc antefinedc = b; b = null; // b становится значением по умолчаниюЧтобы изменить средний параметр B на «необязательный» параметр, вы можете судить его только через аргументы, а затем передать параметры и назначить значения.
параметр отдыха
Поскольку функции JavaScript позволяют получать любой параметр, мы должны использовать аргументы для получения всех параметров при столкновении с задачами:
Функция foo (a, b) {var i, rest = []; if (arguments.length> 2) {for (i = 2; i <arguments.length; i ++) {rest.push (аргументы [i]);}} console.log ('a =' + a); console.log ('b =' + b); консоль.Чтобы получить параметры, отличные от определенных параметров A и B, мы должны использовать аргументы, и цикл начинается из индекса 2, чтобы исключить первые два параметра. Этот метод написания неловкий, просто чтобы получить дополнительный параметр REST. Есть лучший способ?
Стандарт ES6 представляет параметр REST, и вышеуказанная функция может быть переписана как:
Функция foo (a, b, ... rest) {console.log ('a =' + a); console.log ('b =' + b); console.log (rest);} foo (1,2,3,4,5); // Результат // a = 1 // b = 2 // resul [3,4,5] foo (1) // a = 1/b = 1//b = 1/b = 1//b = 1//b = 1//b = 1///bПараметр REST может быть записан только в конце и помечен ... из результата прогона. Из результата работы мы видим, что пропущенные параметры связаны с A, B, и дополнительные параметры передаются переменному отдыху в массиве, поэтому,
Мы получаем все параметры, не требуя аргументов.
Если прошедшие параметры не заполнены нормальными определенными параметрами, это не имеет значения, параметр REST получит пустой массив (обратите внимание, что он не является неопределенным).
ОТВЕТСТВЕННОЕ ОТПРАВЛЕНИЕ
Ранее мы упоминали, что у двигателя JavaScript есть механизм для автоматического добавления полуколонов в конце линии, что может привести к тому, что вы попадете в большую яму в операторе возврата:
function foo () {return {name: 'foo'};} foo (); // {name: 'foo'}Примечание:
function foo () {return: // Полуалон был добавлен автоматически, что эквивалентно возврату неопределенного {name: 'foo'}; // Эта строка оператора больше не может быть выполнена. }Так что правильный способ написать несколько строк - это
function foo () {return {// Полуолон не будет автоматически добавляться здесь, потому что это означает, что оператор еще не закончился. Имя: 'foo'}}Переменная область
В JavaScript то, что объявляется с VAR, на самом деле оценивается.
Если в корпусе функции объявлена переменная, объем переменной является всем корпусом функции, и на переменную не следует ссылаться вне корпуса функции.
'Использовать строгое': function foo () {var x = 1; x = x +1;} x = x +2; // RefenceError не может ссылаться на переменную x вне функцииЕсли каждая разные функции объявляют одну и ту же переменную, то переменная работает только в теле их соответствующих функций. Другими словами, переменные с одинаковым именем в разных функциях не зависят друг от друга и не влияют друг на друга:
'Использовать struct': function foo () {var x = 1; x = x +1;} function bar () {var x = 'a'; x = x + 'b';}Поскольку функции JavaScript могут быть вложены, внутренняя функция может получить доступ к переменным, определенным внешними функциями, а наоборот - нет:
'Использовать строгое'; function foo () {var x = 1; function bar () {var x = 1; function bar () {var y = x +1; // bar может получить доступ к переменной x foo z = y + 1; // referenceerror! Foo не может получить доступ к переменной y бара! }}Что если имена переменных внутренних и внешних функций удваиваются?
'Использовать строгое': function foo () {var x = 1; function bar () {var x = 'a'; alert ('x in bar () =' + x); // 'a'} alert ('x in foo () =' + x) // 1bar ();}Переменное улучшение
Определение функции JavaScript имеет функцию, которая сначала сканирует весь оператор тела функции и «обновление» все объявленные переменные в верхнюю часть функции:
'Использовать строгое'; function foo () {var x = 'hello,'+y; alert (x); var y = 'bob';} foo ();Для вышеупомянутой функции foo () код, увиденный двигателем JavaScript, эквивалентен:
функция foo () {var y; // Поднимите вар x переменной y = 'hello' + y; alert (x); y = 'bob';}Из -за этой странной «характеристики» JavaScript, когда мы определяем переменные внутри функции, пожалуйста, строго соблюдайте правило «для того, чтобы объявить все переменные сначала в рамках функции». Наиболее распространенным способом является использование VAR для объявления всех переменных, используемых внутри функции:
function foo () {var x = 1, // x инициализируется до 1y = x +1, // y инициализируется до 2Z, i; // z и я неопределенные // другие операторы для (i = 0; i <100; i ++) {...}}Глобальный объем
Переменные, не определенные в какой -либо функции, имеют глобальный объем. Фактически, JavaScript имеет глобальную переменную по размеру по умолчанию, которая фактически связана с свойством окна.
«Использовать строгие»; var source = 'изучить javaScript'; alert (course); // 'Learn JavaScript'; alert (window.course); // 'изучать JavaScript'
Пространство имен
Глобальные переменные будут связаны с окном. Различные файлы JavaScript используют одни и те же глобальные переменные или имеют одинаковые функции верхнего уровня, которые вызовут
Именование конфликтов и трудно обнаружить.
Один из способов уменьшения конфликта - это связать все ваши переменные и функции с глобальной переменной.
// единственная переменная Quju myAppvar myApp = {}; // Другие переменные: myApp.name = 'myApp'; myApp.version = 1.0; // другие функции myApp.foo = function () {return 'foo';};Поместите весь ваш код в уникальное пространство имен MyApp значительно уменьшит возможность глобальных переменных конфликтов.
Местный объем
Поскольку сфера действия переменной JavaScript на самом деле находится внутри функции, мы не можем определить переменные, которые не могут быть определены в блоках операций, таких как для петли.
function foo () {for (var i = 0; i <100; i ++) {//} i+= 100; // переменные по -прежнему можно ссылаться;}Чтобы решить область на уровне блока, ES6 представил новое ключевое слово Let, и вместо VAR вы можете объявить переменную на уровне блока:
function foo () {var sum = 0; for (let i = 0; i <100; i ++) {sum += i;} i += 1;}постоянный
Поскольку var и пусть объявляют переменные, если вы хотите объявить постоянную, он не будет работать до ES6. Мы обычно используем все переменные капитала, чтобы указать, что это постоянная
Не изменяйте его значение.
var pi = 3.14;
Стандарт ES6 вводит новое ключевое слово для определения констант, как Const, так и Let имеют область на уровне блока;
const pi = 3,14;
Pi = 3; // Некоторые браузеры не сообщают об ошибках, но не имеют никакого эффекта.
Пи; // 3.14
Приведенный выше JavaScript Basic Functions_in-Depte Analysis of Aragible и Scope-это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.