Область видимости внутри функций
Ребята, привет всем!
Мой вопрос скорее всего является очень простым, хотя я и не смог найти ответа в Интернете. Скажите, как перегрузить (переиспользовать) имя переменной внутри функции если имя этой переменной уже назначено одному из параметров функции? То есть:
function showDialog(title, body) {
title /* <-еще одна "title" */ = (title /* <-параметр */ != undefined) ? title /* <-параметр */ : "Это заголовок по умолчанию";
}
Соответственно при инициализации переменной title внутри функции хотелось бы использовать именно это имя. Заранее спасибо за помощь! |
Очень плохо искали или не внимательно читали
|
Во-первых, возьми за привычку всегда при объявлении переменных использовать var:
(function(){ title = 'value'; })();
alert(window.title);
Во-вторых, то, что пишется в скобках при объявлении функции - это объявление переменных внутри нее. Т.е.
function(title){... // это
function(){ var title = arguments[0];... // и это - эквивалентно
Учитывая вышесказанное, оптимально будет так:
function showDialog(title, body) {
if(typeof title == 'undefined') title = "Это заголовок по умолчанию";
}
|
Судя по всему я запрограммировался :/ пока начал писать, что вопрос не актуален и что, естественно, мой пример будет работать, уже увидел ваши ответы. Однако, большое спасибо за помощь!
Sweet, ваш ответ был особенно полезен, хотя у меня и не возникало проблем с проверками на undef без typeof, но я последовал вашему совету. Я еще использую оператор === при сравнении на undefined. Ооо, действительно интересно: Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
![]() Цитата:
|
Конструкция typeof ... === 'undefined' используется почему, что undefined можно использовать как переменную. Например так:
var someVariable, undefined = 'tra-la-la';
if(someVariable != undefined) alert('o_0');
|
Цитата:
Итак, судя по всему можно писать:
var undefined; // это переменная с именем undefined, ее значение не определено (undefined)
undefined = 1; // значение переменной с именем undefined установлено в 1
if(x) {
ОШИБКА ВЫПОЛНЕНИЯ: ПЕРЕМЕННАЯ x НЕ ОБЪЯВЛЕНА НИГДЕ В КОДЕ!
}
if (typeof x == undefined) {
alert("переменная x не объявлена нигде в коде!");
}
if (x === undefined) {
alert("переменная x не объявлена нигде в коде!");
}
if (!window.x) {
alert("переменная x не объявлена нигде в коде!");
}
if (window.x === undefined) {
alert("переменная x не объявлена нигде в коде!");
}
var x = 2;
if (x) {
// ОСТОРОЖНО! ЕСЛИ x НЕ БЫЛА ОБЪЯВЛЕНА, ТО ОШИБКА ВЫПОЛНЕНИЯ: ПЕРЕМЕННАЯ x НЕ ОБЪЯВЛЕНА НИГДЕ В КОДЕ!
alert("переменная x объявлена, ее значение определено (не undefined) и ее значение не false и не null");
}
if (x != undefined) {
// ОСТОРОЖНО! ЕСЛИ x НЕ БЫЛА ОБЪЯВЛЕНА, ТО ОШИБКА ВЫПОЛНЕНИЯ: ПЕРЕМЕННАЯ x НЕ ОБЪЯВЛЕНА НИГДЕ В КОДЕ!
alert("переменная x объявлена, и ее значение не равно значению переменной с именем undefined");
}
if (x != 'undefined') {
// ОСТОРОЖНО! ЕСЛИ x НЕ БЫЛА БЫ ОБЪЯВЛЕНА, ТО ОШИБКА ВЫПОЛНЕНИЯ: ПЕРЕМЕННАЯ x НЕ ОБЪЯВЛЕНА НИГДЕ В КОДЕ!
alert("переменная x объявлена, и ее значение не равно строке 'undefined'");
}
|
Цитата:
x = false; // или null
if(!window.x) alert("Но у переменной же есть значение?!");
|
Цитата:
Цитата:
Sweet, если уж вы любезно соглашаетесь помочь, не могли бы привести здесь исправленный (а может и дополненный) вариант приведенных мной выше примеров? |
Я не знаю, что там в "старом javascript-коде", но я использую проверку typeof ... === 'undefined' в случаях, когда мне нужно проверить, есть ли у переменной какое-либо значение (в том числе и false или null). if(!...) не позволяет этого. То есть если твоя функция должна по-любому вывести title, то подойдет if(!title)..., а если есть вариант, что когда в функцию передается false, то title не выводится, то лучше использовать оператор typeof
|
Цитата:
function f(foo) {
alert(foo);
arguments[0] = 5;
alert(foo);
}
f(1);
По теме: undefined Пример ТС надо писать
function f(title) {
title = title || 'Default title';
}
|
Цитата:
Изучаем английский по слогам: defined - объявлена, undefined - не объявлена Теперь определяем тип, то есть определяем: false - boolean, вполне себе определенный тип, => if(true){statement} null - дырка от бублика, не определена, за кулисами будет приведена к типу: "типизирована". |
| Часовой пояс GMT +3, время: 00:57. |