美好的一天,我偶然发现了JS中变量范围的问题。 我有这样的功能
var address = ...; //it may be or may not be defined earlier.
// It is not the only variable passed to the function
function search() {
window.location.search = address;
}
但是我需要确定这个变量在定义中,所以我这样做
function search() {
function check(value) {
if(!value) {
value = "1";
}
return value;
}
check(address);
window.location.search = address;
}
但我得到的有时是未定义的,传递给window.location.search,因为check()确实正确返回“1”;
你能指出我的错误吗?
[UPDATE]
我应该早些说过 - 我只是想找一个更好的方法来做。 当然检查是否正确,但是$ address变量不是唯一的 你可以像这样想象它
totaladdress = address1;
totaladdress += address2;
totaladdress += address3;
totaladdress += address4;
totaladdress += address5;
...
window.location.search = totaladdress;
所以我需要一个函数来检查它们(例如check(address1);)并避免几十个IF来使代码更清晰。
答案 0 :(得分:1)
如果变量可能未定义,则不能使用函数进行此类检查 - 您需要在使用可能未定义的名称的位置直接使用typeof
:
function search() {
window.location.search = typeof address !== 'undefined' ? address : 'some default value';
}
答案 1 :(得分:1)
当您为value
分配“1”时,它不会修改address
,因为与address
关联的字符串引用被复制到value
,您无法修改原始文件参考。例如:
var address = "abc";
var value = address;
value = "def";
// address is still "abc"
您正确地从函数返回字符串,但忽略返回的值,因此它没有帮助。你想要的是
address = check(address);
window.location.search = address;
或只是
window.location.search = check(address);
甚至
function setAddress(value) {
window.location.search = value || "1";
}
答案 2 :(得分:0)
您没有从check
方法返回任何值。
function search() {
function check(value) {
if(!value) {
value = "1";
}
return value;
}
window.location.search = check(address);
}
答案 3 :(得分:0)
[更新]抱歉误解了你的需求。你可以试试这个。
var address = ...; //it may be or may not be defined earlier.
// It is not the only variable passed to the function
function search(){
window.address = (window.address === undefined)? 1:window.address;
window.location.search = window.address;
}