【问题标题】:Is there a way that I can declare the variable outside function?有没有办法可以在函数外部声明变量?
【发布时间】:2021-04-11 20:40:17
【问题描述】:

有没有一种方法可以在函数外部声明一个变量? $first 和 $second 似乎无法在函数之外读取它。还有 1 件事 .remove() 不起作用。

function addition(){
  let $first = parseInt($('#firstNum').val());
  let $second = parseInt($('#secondNum').val());
  $('h1').append($first + $second);
}
function subtraction(){
  let $first = parseInt($('#firstNum').val());
  let $second = parseInt($('#secondNum').val());
  $('h1').append($first - $second);
}
function multiplication(){
  let $first = parseInt($('#firstNum').val());
  let $second = parseInt($('#secondNum').val());
  $('h1').append($first * $second);
}
function division(){
  let $first = parseInt($('#firstNum').val());
  let $second = parseInt($('#secondNum').val());
  $('h1').append($first / $second);
}
function clear(){
  $('h1').remove();
}```

【问题讨论】:

    标签: javascript jquery scope


    【解决方案1】:

    还有 1 件事 .remove() 不起作用。

    您应该清除空白而不是删除该元素:

    $("#btnClear").on("click", function(){
      $('h1').html('');
    })
    

    此外,您应该重构您的代码,如下所示:

    $("#btnSubmit").on("click", function(){
      var firstNumber = parseInt($('#firstNum').val());
      var secondNumber = parseInt($('#secondNum').val());
      var operator = $("input[name='operator']:checked").val();
      var result = 0;
      switch(operator){
        case '+':
          result = addition(firstNumber, secondNumber);
          break;
        case '-':
          result = subtraction(firstNumber, secondNumber);
          break;
        case '*':
          result = multiplication(firstNumber, secondNumber);
          break;
        case '/':
          result = division(firstNumber, secondNumber);
          break;
      }
      
      $('h1').html(result);
    });
    function addition(firstNumber, secondNumber){
      return firstNumber + secondNumber;
    }
    function subtraction(firstNumber, secondNumber){
      return firstNumber - secondNumber;
    }
    function multiplication(firstNumber, secondNumber){
      return firstNumber * secondNumber;
    }
    function division(firstNumber, secondNumber){
      return firstNumber / secondNumber;
    }
    
    $("#btnClear").on("click", function(){
      $('h1').html('');
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <input type="text" id ="firstNum" >
    <input type="text" id ="secondNum" >
    <a id="btnSubmit">Submit</a> 
    <br>
    <a><input name="operator" value = "+" type = "radio" checked/> + </a> <br>
    <a><input name="operator" value = "-" type = "radio"/> - </a> <br>
    <a><input name="operator" value = "*" type = "radio"/> * </a> <br>
    <a><input name="operator" value = "/" type = "radio"/> / </a> <br>
    Result: <h1></h1>
    <a id="btnClear">Clear</a> 

    【讨论】:

    【解决方案2】:

    您需要在函数之外定义变量。

    变量可以在当前作用域+内部作用域中读取,但不能在定义它们的外部作用域中读取。

    let $first, $second;
    
    function addition() {
      $first = parseInt($('#firstNum').val());
      $second = parseInt($('#secondNum').val());
      $('h1').append($first + $second);
    }
    

    MDN 有一篇很好的文章解释了 JavaScript 中的作用域:https://developer.mozilla.org/en-US/docs/Glossary/Scope

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 2020-10-17
      • 2012-05-14
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2015-02-10
      相关资源
      最近更新 更多