2016-05-30 51 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()返回undefined,但我想引用全局范围内的变量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,并且不会给你任何机会回到它。然后决定返回哪个值是一件简单的事情。在这里,我使用一个简单的虚假的检查,你可能会也可能不想使用像typeof b === 'undefined'等更详细的东西。

+0

是实现由'window'一个好的做法呢? – Sayakiss

+0

不是。理想情况下,你永远不应该有任何东西附加到'窗口'。 – deceze

+0

这将为'f(0)'和'f(false)'返回'2'。 '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