函数嵌套在if语句中

时间:2013-04-09 15:42:43

标签: javascript function if-statement location match

我遇到以下代码的问题,如果有人能帮助我,我会非常感激。基本上我在调用网址的页面上的几个页面上有几个链接。目前,即使在窗口中打开了extraten页面,它也只在代码的/freeten/部分内调用该函数。

if(location.href.match('/extraten/')) {

    console.log(window.location.href);

    function downloadXM() {
        if(location.href.match('/en/')) {
            window.location.href = "http://core77.com/";
        }

        if(location.href.match('/fr/')) {
            window.location.href = "http://www.notcot.org/";
        }

        if(location.href.match('/de/')) {
            window.location.href = "http://www.spd.org/";
        }

        if(location.href.match('/it/')) {
            window.location.href = "http://sxsw.com/";
        }

    }
}

if(location.href.match('/freeten/')) {

    function downloadXM() {

        if(location.href.match('/en/')) {
            window.location.href = "http://www.wired.com/";
        }

        if(location.href.match('/fr/')) {
            window.location.href = "http://www.bbc.co.uk/";
        }

        if(location.href.match('/de/')) {
            window.location.href = "http://edition.cnn.com/";
        }

        if(location.href.match('/it/')) {
            window.location.href = "http://www.sky.com/";
        }

    }
}

4 个答案:

答案 0 :(得分:6)

不要以这种方式声明函数,而是尝试这样做:

var myFunc;

if (something) {
    myFunc = function () { ... }
} else if (something) {
    myFunc = function () { ... }
}

答案 1 :(得分:1)

这是最简单的改变。 不优雅,但可扩展为noobs

function downloadXM()  {
  window.console && console.log(window.location.href); // helping IE 

  if (location.href.match('/extraten/')){     

    if (location.href.match('/en/')){    
      window.location.href= "http://core77.com/";
    }

    if (location.href.match('/fr/')) {  
      window.location.href= "http://www.notcot.org/";
    }

    if (location.href.match('/de/')) { 
      window.location.href= "http://www.spd.org/";
    }

    if (location.href.match('/it/')) { 
       window.location.href= "http://sxsw.com/";
    }    
  }

 else if (location.href.match('/freeten/')){     

    if (location.href.match('/en/')){    
        window.location.href= "http://www.wired.com/";
    }

    if (location.href.match('/fr/')) {  
        window.location.href= "http://www.bbc.co.uk/";
    }

    if (location.href.match('/de/')) { 
        window.location.href= "http://edition.cnn.com/";
    }

    if (location.href.match('/it/')) { 
        window.location.href= "http://www.sky.com/";
    }
}

答案 2 :(得分:0)

Javascript将函数声明提升到函数顶部,以便第一个downloadXM()声明被第二个downloadXM()覆盖。 Javascript没有任何块范围,就像你试图用if语句做的那样。

答案 3 :(得分:0)

另外一项,您正在使用.match(<RegExp>),它实际上返回您正在使用的RegExp模式的字符串中所有匹配项的数组。在这种情况下,您可能想要使用的是<RegExp>.test(),它返回truefalse,以确定RegExp模式是否与字符串值匹配。

在您的代码中使用此示例:

if (location.href.match('/extraten/')) {

。 。 。会成为:

if (/extraten/.test(location.href.match)) {

修改 - 我并不是说这是导致您出现问题的原因,但是当我使用match()测试您的代码时,我得到了不一致的结果。将其切换为使用test()解决了这些问题。