JavaScript设计模式和开发实践,问题求解?

玩笑过后
  • 22
  var namespaceCache = {};
  var a = function( namespace ){
      var namespace = namespace || "default";
      var ret = {
        c : 23,
        d : 56
      };
            return namespace ? 
            ( namespaceCache[ namespace ] ? namespaceCache[ namespace ] : namespaceCache[ namespace ] = ret ) 
            : ret;
        }

        var b = a( 'klkx' );
        console.log( b );
        console.log( namespaceCache );

截取文章的订阅模式的一段代码:
返回值永远都不会是ret,但是为什么还要这么写?

回复
阅读 1.6k
5 个回答
✓ 已被采纳

这种写法其实是一种规范,开发中可以不这么写,但是尽量参考

无论是第一句namespace的赋值,还是return后面的语句,他们规范性都很强,考虑到了错误处理。看这里的整体代码,显得返回ret成了无用的一处,但是如果不这么写,今后项目需求更改,namespace传进来什么就是什么,那是不是return后面还要加上这种判断。所以这是一种提前的错误处理,就像建造了一栋楼,提前想好了发生地震火灾等危险时候的情况。

照代码的意思 ret 会初始化 namespaceCache 不存在或是namespaceCache[namespace] == false 情况.

namespaceCache[ namespace ] = ret 

这里不是有个赋值?

前端记录
  • 533

这个函数return的部分写的是有问题 因为namespace始终为真 所以不会返回冒号后面的值

这里的ret定义很用必要的,防止了
namespace有定义(前面强制定义了),但namespaceCache[namespace] 未定义的情况,在这种情况下会初始化 namespaceCache[namespace]

宣传栏