About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • May

    25

    值得唾弃的 JS 脚本之函数直接量表达式

    • 0 Comments
    • JavaScript
    • 发布:古树
    • 引用:0
    • 浏览:
    <script>
    var f = function fact(x){
        if(x <=1)
            return 1;
        else 
            return x * fact(x-1);    
    }
    alert(f(2));
    alert(fact(2));
    </script>

    这是一个看起来像是有命名的函数直接量。为什么说它看起来像是有命名呢?因为要分情况。

    在 IE 8 中测试结果发现它真的就像命名函数一样,甚至可以将 alert(fact(2)); 提前到函数直接量表达式的前面;

    但在 Google Chrome 35 中上面的代码最后一行会产生一个运行时错误(因为访问了一个不存在的定义)。如果将上面代码中的最后两种交换位置,在 Chrome 35 中不会输出任何内容,因为当 alert(fact(2)); 运行产生错误时会静默失败,然后后续代码会全部中止运行。

    而事实上这种看起来好像有命名的函数直接量只允许 JS 1.5 后的版本中使用,并且是只允许的在函数体内用这个名字来引用自身(比如类似上面的嵌套函数)。

    所以,如果不是想要展现自己在特定平台开发的编程技巧,就算有脚本标准,最好也不要使用奇葩的写法(因为不同浏览器厂商未必都遵循标准),除非那个脚本语言是被垄断性的只能运行在特定的平台,比如 ActionScript。

    相关文章:
    Post Comment.

    发表评论