-1
function decode(s) {
  decode = function (s) {
      return s + '!'
  }
  return s+'?'
}
console.log(decode("asd"))//outputs asd?
console.log(decode("qwe"))//outputs qwe!

此代码将从函数内替换函数体。但不幸的是,这不是很干净。因为第一个decode是模块函数作用域,第二个decode是全局变量作用域。是否有另一种更清洁的方法可以从函数内部替换函数体?

用例示例是第一次调用它的函数可能需要初始化一些数据。后续调用只会进行解码。

4

2 回答 2

2

您可以使用这样的东西来创建一个变量来跟踪函数被调用的次数,并在第一次调用它时进行一些初始化:

var decode = (function(){
  var numCalls = 0;
  var potatos;

  return function(){
    if(numCalls++ == 0){
      // Initialize some stuff here
      potatos = 7;
    }

    // Use stuff here
    console.log(potatos);
    potatos += 3;
  }
})();
于 2013-10-27T19:30:23.293 回答
0

您使用的模式被称为自定义函数(或可能是惰性函数定义)。

相反,为什么不使用带有构造函数的对象,

var Decode = function(s){
    var that = this;

    that.property = s;

    that.decode = function(){
        return that.property + "!";
    };
};

var decode = new Decode("asd");

decode.property //"asd"
decode.decode() //"asd!"
于 2013-10-27T19:31:13.060 回答