2016-05-30 2 views
0
var a = 2; 
function f(a) {return a;} 
console.log(f(1));// return 1 
console.log(f());// return undefined, but I want to make it return 2... 

f() возвращает неопределенное, но я хочу, чтобы это передать переменную a в глобальном масштабе. Как я мог это достичь?Как сослаться на неопределенный параметр в глобальном масштабе

ответ

2

Использование arguments.length, чтобы проверить, если параметр был передан функции:

var a = 2; 
 
function f(b) { 
 
    if(arguments.length===1) return b; 
 
    return a; 
 
} 
 

 
console.log(f(3));   //3 
 
console.log(f(undefined)); //undefined 
 
console.log(f(0));   //0 
 
console.log(f());   //2

5
var a = 2; 
function f(b) { 
    return b || a; 
} 

Вы должны использовать другое имя для аргумента функции, иначе это будет затенять внешний a и не даст вам никаких шансов вернуть его. Тогда просто решить, какое значение нужно вернуть. Здесь я использую простой код falsey, вы можете или не хотите использовать что-то более подробное, например typeof b === 'undefined' или подобное.

+0

ли достичь этого с помощью 'window' хорошей практикой? – Sayakiss

+0

Нет. В идеале вы никогда не должны прикрепляться к окну. – deceze

+0

Это вернет '2' для' f (0) 'и' f (false) '. Тест 'undefined' помогает, но использование' arguments.length' гарантирует, что 'b' отсутствует. –

1

вы могли бы сделать что-то вроде этого, которое проверяет, была ли переменная определена или нет.

var a = 2; 
function f(x) { 
    return (typeof x==="undefined")? a : x; 
} 
console.log(f(1));// return 1 
console.log(f());// return 2 
Смежные вопросы