1

请参阅以下代码块。哪一个是最好的选择?基本上他们都在做同样的事情

示例 1

var otherVars1
var otherVars2
var otherVars3
var valid; // create a boolean variable
// some precondition to set valid to true or false
.... 

if (valid || someRegex.test(value)) {
  ...
}

示例 2

var otherVars1
var otherVars2
var otherVars3

// create a function that return a boolean
function isValid() {
  ...
  return Boolean
}

if (isValid() || someRegex.test(value)) {
 ...
}

示例 3

var otherVars1
var otherVars2
var otherVars3

// use self-invoke anonymous function directly
if ((function() {
...
return Boolean })() || someRgex.test(value)) {
  ...
}

对比这三个例子,我更喜欢使用自调用匿名函数(例子3),原因如下

  • 不需要创建不必要的变量和分配内存(ex1:valid,ex2:isValid)

  • 保持代码干净,一块一块或一个模块,以便于管理和组织

  • 自包含,以便自调用匿名函数之外的变量不会被污染

如果我在上述任何一点上错了,请纠正我,并告诉我您的偏好和原因是什么?

4

1 回答 1

1

我会说你可以使用,immediate invocation of function expressions但你可以避免在里面使用它们if,你可以使用如下。

这将避免不必要global scope的变量声明、函数等。

(function() {
  var otherVars1
  var otherVars2
  var otherVars3
  var valid; // create a boolean variable
  // some precondition to set valid to true or false
  .... 

  if (valid || someRegex.test(value)) {
    ...
  }

})();
于 2016-11-16T03:08:36.283 回答