如何在不同的条件下声明不同的功能?

时间:2017-03-30 10:05:53

标签: javascript maintainability

  

此外,函数声明不应出现在其中   块语句。例如,此代码的行为不会如预期的那样:

// Bad
if (condition) {
    function doSomething() {
    alert("Hi!");
  }
} else {
    function doSomething() {
    alert("Yo!");
  }
}
     

从浏览器到浏览器的确如何工作会有所不同。最   浏览器自动获取第二个声明而不进行评估   条件; Firefox评估条件并使用适当的条件   功能声明。这是ECMAScript中的灰色区域   规范,因此应避免。函数声明应该   仅在条件语句之外使用。这种模式是   在Google JavaScript样式指南中明确禁止。

我在第42页的“可维护的JavaScript”一书中找到了这些词,它表示在' if'中声明功能。声明基本上是不允许的。那么在不同条件下声明不同函数的正确方法是什么?这本书没有解决这个问题。

4 个答案:

答案 0 :(得分:0)

  

JavaScript解释器始终将函数声明和函数变量移动('hoisted')到JavaScript范围的顶部。

来源:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

if / else块不会创建新范围,这意味着该方法不起作用。有很多方法可以处理这种情况,其中一些是:

1 - 在函数定义内部添加if (condition)

function doSomething(){
  var condition = .......
  if (condition) { ... }
  else { .... }
}

2 - 向函数发送参数以了解要使用的实现(如果找出条件的值不适合函数内部。)

function doSomething(condition){
  if (condition) { ... }
  else { .... }
}

3 - 有两个功能可以做不同的事情,并根据条件调用其中一个。

if (condition) doSomething()
else doOtherThing()

答案 1 :(得分:0)

您可能想要更好地设计代码,例如接受函数中的参数以在不同情况之间切换或具有完全独立的函数。

解决方法是在if块之前声明这两个函数,并将所需的函数赋值给常量并在需要的地方调用该常量:

function doSomething1() {
  alert("Yo!");
}

function doSomething2() {
  alert("Hi!");
}

const doSomething;

if (condition) {
  doSomething = doSomething1
} else {
  doSomething = doSomething2
}

doSomething()

但同样,这不是一个好的模式,也不是一个研究得很好的代码

答案 2 :(得分:0)

你错误地思考它。只需声明你的功能。声明该功能只是创建它。如果您使用或不使用取决于您。它只是说不要尝试有条件地创建函数。使用

  

if statements

致电或不致电功能。不要用它们来决定是否

  

创建功能

答案 3 :(得分:0)

您可以使用function expression并将所需的函数分配给变量。

var doSomething = condition ?
        function () { alert("Hi!"); } :
        function () { alert("Yo!"); };