The ReferenceError
object represents an error when a variable that doesn’t exist (or hasn’t yet been initialized) in the current scope is referenced.
ReferenceError
is a serializable object, so it can be cloned with structuredClone()
or copied between Workers using postMessage()
.
Constructor
ReferenceError()
-
Creates a new
ReferenceError
object.
Instance properties
ReferenceError.prototype.message
-
Error message. Inherited from
Error
. ReferenceError.prototype.name
-
Error name. Inherited from
Error
. ReferenceError.prototype.cause
-
Error cause. Inherited from
Error
. ReferenceError.prototype.fileName
Non-standard
-
Path to file that raised this error. Inherited from
Error
. ReferenceError.prototype.lineNumber
Non-standard
-
Line number in file that raised this error. Inherited from
Error
. ReferenceError.prototype.columnNumber
Non-standard
-
Column number in line that raised this error. Inherited from
Error
. ReferenceError.prototype.stack
Non-standard
-
Stack trace. Inherited from
Error
.
Examples
Catching a ReferenceError
try {
let a = undefinedVariable;
} catch (e) {
console.log(e instanceof ReferenceError); // true
console.log(e.message); // "undefinedVariable is not defined"
console.log(e.name); // "ReferenceError"
console.log(e.fileName); // "Scratchpad/1"
console.log(e.lineNumber); // 2
console.log(e.columnNumber); // 6
console.log(e.stack); // "@Scratchpad/2:2:7n"
}
Creating a ReferenceError
try {
throw new ReferenceError("Hello", "someFile.js", 10);
} catch (e) {
console.log(e instanceof ReferenceError); // true
console.log(e.message); // "Hello"
console.log(e.name); // "ReferenceError"
console.log(e.fileName); // "someFile.js"
console.log(e.lineNumber); // 10
console.log(e.columnNumber); // 0
console.log(e.stack); // "@Scratchpad/2:2:9n"
}
Specifications
Specification |
---|
ECMAScript Language Specification # sec-native-error-types-used-in-this-standard-referenceerror |
Browser compatibility
BCD tables only load in the browser
See also
The Javascript ReferenceError
occurs when referencing a variable that does not exist or has not yet been initialized in the current scope. Reference errors in Javascript are of a few different types, with variations of each, that may get triggered in code. Some of these are discussed below.
What Causes Javascript ReferenceError
The Javascript ReferenceError
is thrown when an attempt is made to reference a non-existing or out of scope variable. There are a few types of reference errors in Javascript with different variations of each. Some of these are:
- Undefined variables — Not defining a variable before referencing it is one of the most common triggers for reference errors in Javascript.
- Out of scope variables — Variables defined inside a function’s scope cannot be accessed outside of it. If an attempt is made to reference an out of scope variable, a
ReferenceError
is thrown. - Strict mode — Using strict mode in Javascript can throw a
ReferenceError
if a variable is not defined using thevar
,let
orconst
keywords. Here’s an example of such a declaration: foo = true; - Referencing the variable
foo
in code would result in aReferenceError
being thrown if using strict mode. The error would not occur if not using strict mode. - Variable redeclarations — Redeclaring variables using the wrong keywords can also throw a
ReferenceError
. For example, initially declaring a variable usinglet
, and subsequently redeclaring usinglet
again throws aReferenceError
.
ReferenceError Example
Here’s an example of a Javascript ReferenceError
thrown when referencing a variable that is out of scope:
function text() {
var str = "Hello World";
return str;
}
console.log(str);
In the above example, the variable str
is defined inside the text()
function and referenced outside the function. Since str
is defined only in the scope of the function, referencing it from outside the function causes a ReferenceError
:
Uncaught ReferenceError: str is not defined
How to Fix ReferenceError
Reference errors in Javascript are mainly thrown when an attempt is made to reference a variable that does not exist or is out of scope. Therefore, in the majority of cases, a ReferenceError
can be fixed by making sure that the referenced variable is defined correctly and is being called in the correct scope.
The earlier example can be updated to fix the ReferenceError
by defining the str
variable in the global scope:
var str = "Hello World";
function text() {
return str;
}
console.log(text());
Since the text()
function is defined in the global scope, it can access variables defined in the global scope. Therefore, running the above code produces the correct output as expected:
Hello World
Track, Analyze and Manage Errors With Rollbar
Managing errors and exceptions in your code is challenging. It can make deploying production code an unnerving experience. Being able to track, analyze, and manage errors in real-time can help you to proceed with more confidence. Rollbar automates error monitoring and triaging, making fixing JavaScript errors easier than ever. Sign Up Today!
In JavaScript, a reference error is thrown when a code attempts to reference a non-existing variable. In this article, we will dive into the most common types of reference error triggers and how to fix them.
Common Reference Errors
According to JavaScript web docs, there are six different types of reference errors, with variations of each, that may get triggered in our code.This article focuses on five most common reference error examples for new developers.
Find Your Bootcamp Match
- Career Karma matches you with top tech bootcamps
- Access exclusive scholarships and prep courses
Select your interest
First name
Last name
Phone number
By continuing you agree to our Terms of Service and Privacy Policy, and you consent to receive offers and opportunities from Career Karma by telephone, text message, and email.
Undefined variables
Forgetting to define a variable before referencing it may be the most common reference error trigger for new developers. This can also happen if the referenced variable has been commented out.
let firstName = "John" let age = 23 console.log(lastName) // Uncaught ReferenceError: lastName is not defined
let firstName = "John" let lastName = "Smith" let age = 23 console.log(lastName) // returns Smith
Scope
Variables defined inside a function’s scope cannot be accessed outside of it. We can think of scope as laws that govern certain parts of land, let’s say in the United States. A law in the books for the city of San Francisco may not be okay to follow in the city of Miami. Residents of Miami living in Miami must follow Miami laws.
In the function below, we attempt to access the value of a outside of its lexical scope.
function nums() { numA = 1 numB = 2 return numA + numB } console.log(numA); // Uncaught ReferenceError: numA is not defined
We can fix this by defining our variables in the global scope.
numA = 1 numB = 2 function nums() { return numA + numB } console.log(nums()); // returns 3
Strict Mode
Strict Mode intentionally has a different set of semantics than the regular defaulted, “sloppy mode” JavaScript code. A key thing to remember while coding in strict mode is that it eliminates silent errors by changing them into throw errors. A JavaScript statement will be using strict mode if “use strict”; is invoked before a statement.
function referenceErr(a){ "use strict"; foo = true; if(a == 0){ return foo } else { return !foo } } console.log(referenceErr(1)) // Uncaught ReferenceError: foo is not defined
As JavaScript developers we know to use var, let, or const in order to define a variable, but the above would have been a silent error if strict mode was not invoked.
function referenceErr(a){ "use strict"; let foo = true; if(a == 0){ return foo } else { return !foo } } console.log(referenceErr(1)) // returns false
Redeclarations
Not full understanding how to redeclare variables can also trigger reference errors.
function redeclarations() { let declare = 1; if (true) { let declare = (declare + 1); } } console.log(redeclarations()) // Uncaught ReferenceError: Cannot access 'declare' before initialization
To fix the code above, we must either change “let” to “var” or omit “let” inside our if statement completely.
function redeclarations() { let declare = 1; if (true) { declare = (declare + 1); } } console.log(redeclarations())
Conclusion
In JavaScript a reference error is mainly thrown when a code is attempting to reference a variable that does not exist, but there are many ways we can write our code that may trigger this reference error to be thrown. Making sure the variable referenced is defined and is being called in the correct scope can be an easy fix for the majority of cases for new coders.
Saif Sadiq
Posted On: April 17, 2018
39426 Views
2 Min Read
How does it feel when you go to give a job interview and after reaching the interview location you find out that the company for which you are here doesn’t even exist.
Obviously you got angry and your mind will start throwing negative thoughts.
Exactly same happens with JavaScript too.
When any value is assigned to undeclared variable or assignment without the var keyword or variable is not in your current scope, it might lead to unexpected results and that’s why JavaScript presents a ReferenceError: assignment to undeclared variable "x"
in strict mode. And this error causes a problem in execution of functions.
If you’ve begun to try out JavaScript you might have encountered some pretty baffling errors. I know I sure did…
ReferenceError: assignment to undeclared variable “x”
Errors about undeclared variable assignments occur in strict mode code only. In non-strict code, they are silently ignored.
Code without ‘var’ keyword
function foo() { ‘use strict’; bar = true; //variable not declared } foo(); |
What you get after executing above program?? An Error?? 🙁
How do you need to code 🙂
Insert ‘var’ in front of your variable and see your program running
function foo() { ‘use strict’; var bar = true; //declared variable here } foo(); |
Likewise there are many scripting factors possible to generate reference error in javascript.
ReferenceError: «x» is not defined |
ReferenceError: deprecated caller or arguments usage |
ReferenceError: can‘t access lexical declaration`X’ before initialization |
ReferenceError: reference to undefined property «x» |
ReferenceError: invalid assignment left—hand side |
Author’s Profile
Saif Sadiq
Saif Sadiq is a Product Growth specialist at LambdaTest and Growth Marketer.
Got Questions? Drop them on LambdaTest Community. Visit now
Test your websites, web-apps or mobile apps seamlessly with LambdaTest.
- Selenium, Cypress, Playwright & Puppeteer Testing
- Real Devices Cloud
- Native App Testing
- Appium Testing
- Live Interactive Testing
- Smart Visual UI Testing
Book a Demo
The ReferenceError
object represents an error when a variable that doesn’t exist (or hasn’t yet been initialized) in the current scope is referenced.
ReferenceError
is a serializable object, so it can be cloned with structuredClone()
or copied between Workers using postMessage()
.
Constructor
Instance properties
Examples
Catching a ReferenceError
try { let a = undefinedVariable } catch (e) { console.log(e instanceof ReferenceError) console.log(e.message) console.log(e.name) console.log(e.fileName) console.log(e.lineNumber) console.log(e.columnNumber) console.log(e.stack) }
Creating a ReferenceError
try { throw new ReferenceError('Hello', 'someFile.js', 10) } catch (e) { console.log(e instanceof ReferenceError) console.log(e.message) console.log(e.name) console.log(e.fileName) console.log(e.lineNumber) console.log(e.columnNumber) console.log(e.stack) }
Specifications
Browser compatibility
Desktop | Mobile | Server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | Deno | Node.js | |
ReferenceError |
1 |
12 |
1 |
5.5 |
5 |
1 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
ReferenceError |
1 |
12 |
1 |
5.5 |
5 |
1 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
serializable_object |
77 |
79 |
103 [«Version 103 serializable properties: |
No |
64 |
No |
77 |
77 |
103 [«Version 103 serializable properties: |
55 |
No |
12.0 |
No |
No |
See also
Error
JavaScript
-
RangeError
The RangeError object indicates when value is not set of allowed values.
-
RangeError() constructor
The RangeError() constructor creates when value is not in set of allowed values.
-
ReferenceError() constructor
The ReferenceError object represents an when non-existent variable referenced.
-
Reflect
Reflect is a built-in object that provides methods for interceptable JavaScript operations.
Hello JavaScript developer, if you are wondering how to fix the Reference Error $ is not defined while using jQuery then you have come to the right place. «Reference Error: $ is not defined» is one of the common JavaScript errors which come when you try to use $, which is a shortcut of jQuery() function before you load the jQuery library like calling $(document).ready() function. «ReferenceError: XXX is not defined» is a standard JavaScript error, which comes when you try to access a variable or function before declaring it. Since jQuery is also a JavaScript library, you must first include the declaration of the jQuery function or $() before you use it.
In order to understand this error more, let’s see how to reproduce «Reference Error: $ is not defined» in JavaScript with simple examples of «reference error: jQuery is not defined»
Here is an example of Reference Error: not defined in JavaScript for both variable and function:
// accessing function without defining it getCount(); // ReferenceError: getCount is not defined getCount = function(){}; getCount() // No errors
It’s clear now that «Uncaught ReferenceError: XX is not defined» comes when you try to access XX, which could be a variable or function before defining it.
And, If you want to learn Modern JavaScript or level up your skills then I suggest you join these free JavaScript courses online. It’s one of the best and hands-on courses to learn ES 6 and other new JavaScript features.
5 Common Reasons ReferenceError: $ is not defined in jQuery
Having said that, let’s see some common scenarios or mistakes which cause the «Uncaught ReferenceError: $ is not defined» error while using jQuery in your project:
1. Path to your jquery.js file is wrong and it can not be found (Error 404).
This problem can be solved by fixing your path to the jquery.js file. If your project is a public website, you better use Google hosted jQuery files to avoid such issues.
2. jQuery plugin is included before the jQuery file.
You can solve this problem by including jquery.js file before any jQuery plugin files.
3. jQuery UI is included before jQuery min library
You cannot put the script reference to jquery-ui before the jQuery script itself. That’s what fixed the problem to me: first jquery-x.x.x.min.js, then jquery-ui-xxxxxx.js
4. You are including the jQuery file without the protocol in the URL and accessing the page from your local file system. This is a silly mistake but it happens. To solve this problem just add HTTP protocol (http:// instead of //) in the URL while you are developing.
Sometimes this error also comes «jQuery not defined» as shown below:
5. jQuery file is included from the web, but you don’t have an internet connection. It is a silly mistake, but you would be surprised how often it happens. You can solve this problem by including a local jquery.js file copy or connect to the internet
6. Incorrect order of script while loading multiple JavaScript files
If you are loading multiple JavaScript files using the script tag, you must first load jQuery one. corrected it
That’s all about the common reasons for Reference Error: $ is not defined in jQuery. Most likely your problem should be solved by following these tips. If the above cases do not solve your case, try to figure out why jQuery is not loaded before the line where this error is thrown.
Related jQuery tutorials you may like
- How to get the current URL, Parameters, and Hash using jQuery? (solution)
- 5 Free Courses to learn jQuery for beginners (free courses)
- How to use more than one jQuery UI Date Picker in the JSP page? (example)
- 10 Free Courses to learn JavaScript for beginners (free courses)
- How to create tab-based UI using jQuery? (example)
- 10 Free courses to learn Angular for beginners (free courses)
- How to redirect a page URL using jQuery and JavaScript? (solution)
- Top 5 Websites to learn JavaScript for FREE (websites)
- How to write HelloWorld in jQuery? (solution)
- 5 Books to learn jQuery for Web developers (books)
- Top 10 Courses to learn JavaScript tin depth (best courses)
- How to load jQuery on a web page? (solution)
- Difference between jQuery document.ready() and JavaScript window.onload event? (answer)
Thanks for reading this article so far. If you find this article useful then please share it with your friends and colleagues. If you have any questions or feedback then please drop a note.
P. S. — If you want to become a web developer, you can also see these free web development courses to find out which frameworks, libraries, tools, and technologies you need to learn to become the Web developer you always wanted to be.
Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером
О, нет, ошибки! И как с ними справляться
—
Введение в программирование
Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.
Транскрипт урока
У вас вечеринка, а закуска кончилась, вы просите подругу что-нибудь купить.
— Эй, можешь сходить в магазин и купить какой-нибудь еды?
Она отвечает:
— Что именно?
Вы говорите:
— Ну, типа чипсы или что-нибудь такое. У нас всё закончилось.
Она отвечает:
— Сколько упаковок чипсов взять?
И у вас уже начинает немного вскипать мозг:
— Да, я не знаю, штук 5.
— А какие чипсы?
И вы так глазами делаете и отвечаете «ааа… забудь», или решаете идти до конца и объясняете подробно задачу: «Возьми 5 средних пакетов картофельных чипсов со вкусом бекона».
Десять минут спустя она возвращается с пустыми руками и говорит «у них не было таких чипсов в пакетах среднего размера».
О «программистах» есть определённые стереотипы и то, что они могут быть слишком конкретными и чересчур дотошными — один из них. Многие думают, что такие люди хорошо разбираются в математике или что-то подобное.
В реальности всё намного сложнее. Не существует всего двух типов людей, спектр типов личности буквально бесконечен. И для некоторых людей программирование немного более органично, потому что компьютеры абсолютно конкретные и абсурдно однозначные. Это совершенно не значит, что если вы считаете, что у вас «нематематический склад ума», вы не сможете стать хорошим разработчиком. Это значит только, что вам нужно научиться лучше распознавать и понимать, как именно работают компьютеры.
Такой способ поведения компьютеров ведёт ко множеству ошибок. Если вы наберёте console,log
— console запятая log, вместо console точка log, JavaScript скажет «Понятия не имею, что ты имел в виду».
Вы будете делать ошибки и ваши программы будут содержать ошибки. Жизнь — она такая. Любой программист делает ошибки и это не имеет особого значения. Значение имеет только то, как вы потом с ними справляетесь. Исправление ошибок — важный навык. Это делает программирование непохожим на другие типы работ: ошибки неизбежны, вы не можете от них полностью застраховаться, а исправление ошибок — часть вашей работы.
Ошибка вроде «запятая вместо точки» это тип, который проще всего заметить и исправить. Это «синтаксическая ошибка», потому что неверный символ, как запятая в этом случае, нарушает синтаксические правила языка.
Когда вы запускаете код с такой ошибкой, интерпретатор JavaScript — та штука, которая исполняет JavaScript-программы — пожалуется: SyntaxError и укажет вам на то место, где по его мнению есть проблема.
const cube = (num) => {
return num * num * num;
})
→ node test.js
/Users/rakhim/test.js:3
})
^
SyntaxError: Unexpected token )
at Object.exports.runInThisContext (vm.js:78:16)
at Module._compile (module.js:543:28)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:420:7)
at startup (bootstrap_node.js:139:9)
at bootstrap_node.js:535:3
Вот, например, это определение функции и в конце — лишняя скобка. Её там быть не должно и это ломает всю программу, поэтому JavaScript жалуется: «SyntaxError:» Unexpected token (символ))». Эта скобка unexpected — неожиданная.
Синтаксическая ошибка — это как если кто-то бредит вслух. Никто вокруг ничего не понимает.
Следующий тип ошибки подобен синтаксической, но в этом случае вы нарушаете не законы синтаксиса языка, а как бы законы синтаксиса собственного кода. В прошлый раз мы создали функцию abs
, которая возвращала абсолютное значение числа.
→ node test.js
/Users/rakhim/test.js:1
ads(12);
^
ReferenceError: ads is not defined
at Object.<anonymous> (/Users/rakhim/test.js:1:63)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:420:7)
at startup (bootstrap_node.js:139:9)
at bootstrap_node.js:535:3
Если вы вызовете ads
вместо abs
, интерпретатор JavaScript пожалуется: ReferenceError: ads is not defined
. Вы использовали, как вам кажется, существующее название, но на самом деле такого названия нет.
Несколько строк, которые следуют после указания ошибки, могут смутить и оттолкнуть вас, но они тут только для пользы. Это stack trace — последовательность вызовов функций, которая привела к ошибке. Когда вы запускаете свою программу, даже крошечную, она становится частью чего-то более крупного — сложной системой JavaScript-кода, который приводится в действие, чтобы оживить вашу программу. Тут видно, что проблема была в моём файле. Следующая строка — это место, откуда был вызван мой код, третья строка — откуда была вызвана вторая и в таком духе можно продолжать дальше. Это как отслеживать шаги в обратном направлении — проблема есть, и мы можем возвращаться по одному шагу назад и смотреть, не нашлась ли ошибка.
Мы допускаем, что вся внутренняя система исправно работает, поэтому ошибка в нашем коде. Когда одна из ваших функций вызывает другую, вы увидите эту последовательность вызовов в стектрейсе.
ReferenceError может случиться с другими константами: например, если ваш код содержит 10 * pi
, а pi
не существует, потому что вы не создавали константу с точно таким названием, вы получите ReferenceError.
ReferenceError — это как называть кого-то чужим именем.
Следующий тип ошибки — когда вы путаете одну вещь с другой. Взгляните на этот код:
const length = 12;
const num = length(54);
Сначала мы создали константу. Помните, что это как давать чему-то название: в нашем случае — числу 12 даётся название length
. В следующей строке мы вызываем функцию length
и передаём ей аргумент — число 54. Но подождите! length
— это не функция! Это всего лишь число. Числа — это не функции, не ящики, которые производят какие-то действия. И JavaScript пожалуется именно на это:
→ node test.js
/Users/rakhim/test.js:2
const num = length(-54);
^
TypeError: length is not a function
at Object.<anonymous> (/Users/rakhim/test.js:2:13)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:420:7)
at startup (bootstrap_node.js:139:9)
at bootstrap_node.js:535:3
Это Ошибка типизации: тип объекта, который вы использовали, неверный. Интерпретатор JavaScript не скажет чем что-то является, но точно скажет чем оно не является. length
— это не функция.
Ошибка типизации — это как просить кошку постирать бельё. Возможно, вы хотели попросить об этом вашего друга.
Все эти ошибки — syntax error, reference error и type error — возникают из-за использования неправильных слов. И все они предельно очевидные: вы видите сообщение об ошибке и достаточно хорошо понимаете в чём проблема. Обычно сразу понятно, как их исправить:
- Синтаксическая ошибка? Заменить, удалить или добавить символы. Часто проблема в скобках и кавычках: открытые скобки и открытые кавычки должны быть закрыты.
- Reference error? Проверить, существует ли тот объект, на который вы ссылаетесь. Возможно, вы использовали неправильное название или забыли создать его.
- Ошибка типизации? Убедиться, что вы используете объекты верно. Часто проблема — простая путаница: вы создали и числовую константу и функцию, а потом пытаетесь вызвать число. Наверное, вы хотели вызвать функцию.
Последний тип ошибки, о котором мы сегодня поговорим — самый злой: Логическая ошибка. Допустим, мы пишем функцию, которая конвертирует градусы по фаренгейту (F) в градусы по цельсию (C). Чтобы сконвертировать температуру по одной шкале в другую, нужно вычесть 32 и умножить на 5/9. Например (50°F — 32) x 5/9 = 10°C.
const fahrToCelsius = (fahr) => {
return fahr - 32 * 5/9;
}
Выглядит нормально? Давайте запустим эту функцию, сконвертируем 50 градусов и выведем на экран:
console.log(fahrToCelsius(50));
И у нас получилось 32.22222222222222. Не 10. Что произошло? JavaScript не пожаловался, когда код запустился, никаких ошибок не выскакивало. Компьютер не знает, что нам нужно, поэтому он производит вычисление, как мы его и просили. Но такое вычисление ошибочно — допустили ошибку мы. Нам нужно вначале вычесть 32, а потом умножить это на 5/9. Но мы не использовали скобки, поэтому 32 вначале умножилось на 5/9, а затем результат был отнят от температуры в фаренгейтах.
Это Логическая ошибка. Мы не нарушили никаких правил, мы просто сделали что-то не то. Наш пример был простым: мы написали функцию, запустили её и увидели неверный результат. Но представьте, что функция — это только маленькая частица крупной системы. Приложение для формирования бюджета в огромной организации отправляет отчёт в главную бухгалтерию, что в следующем месяце для оплаты счёта за электричество требуются дополнительные $300 000. Организуется экстренное собрание, увольняют людей, генеральный директор снова уходит в запой. Что случилось?
Иногда обнаружить проблему может оказаться трудной задачей: система кондиционирования ожидает, что январская температура будет 32 градуса по цельсию, вместо 10, потому что кто-то забыл использовать скобки в функции.
Борьба с логическими ошибками — это целиком ваша ответственность. И временами — тяжёлая работа, но в конце приходит сильное облегчение и удовлетворение: а-ааа, так вот в чём была проблема!
Теперь ваша очередь делать ошибки! Выполните тест и упражнение, чтобы ощутить боль.
Дополнение к уроку
Листочек
Самый действенный способ понять, как работает участок кода —
это расписать его выполнение на бумажке, как если бы вы были компьютером (медленным и немного голодным).
Метод утенка
Метод утёнка — психологический метод решения задачи, делегирующий её мысленному помощнику. Метод описан в книге «Программист-прагматик».
Тестируемый ставит на рабочем столе игрушечного утёнка
(или представляет его мысленно; на самом деле уточка — это условно, предмет может быть любым), и когда у него возникает вопрос, на который трудно ответить, то он задаёт его игрушке, как живому человеку, словно она действительно может ответить.
Считается, что правильная формулировка вопроса содержит как минимум половину ответа, а также это дает толчок мыслям, направляя их в нужное русло.
Метод также используется при отладке. Если определённая часть программы не работает, программист пытается объяснить утёнку, что делает каждая строка программы, и в процессе этого сам находит ошибку.
Выводы
4 типа ошибок:
- Syntax error. Неверное использование языка. Часто лишние или недостающие скобки или кавычки. Что делать? Заменить, удалить или добавить символы. Часто проблема в скобках или кавычках: открытые скобки должны быть закрыты, открытые кавычки должны быть закрыты.
- Reference error. Использование несуществующего названия. Что делать? Проверить, существует ли то, на что вы ссылаетесь. Возможно вы использовали ошибочное название или забыли его создать.
- Type error. Использование неверного типа, например попытка вызвать константу числа, как функцию. Что делать? Убедиться, что всё используется верно. Часто проблема в простой путанице: вы создали численную константу и функциональную константу, а потом пытаетесь вызвать число. Вероятно вы собирались вызвать функцию.
- Logic error. (Логическая ошибка) Ваш код выполняет не то, что требуется, но программа запускается и не выдаёт ошибок трёх перечисленных выше типов. Сломана логика. Что делать? Проверить свой код, убедиться, что он выполняет то, что должен.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты.