data:2021-01-03

if/else中的方法重写问题
else中的语句相当于将if中的function重写,因此无论flag为何值,返回的方法始终为重写后的方法。将方法赋值给一个变量,方法就不会被重写,因此才能得到正确的结果。

function functions(flag) {
    if (flag) {
      function getValue() { return 'a'; }
    } else {
      function getValue() { return 'b'; }
    }

    return getValue();
}
//以上代码出现的问题是:直接声明的方法getvalue而忽视了if/else语句的上述重写问题
//所以解决办法为:
function functions(flag) {
    if (flag) {
      var  getValue=function (){ return 'a'; }
    } else {
      var getValue=function (){ return 'b'; }
    }

    return getValue();
}
  • parseFloat/parseInt方法
    parseInt()方法只能解析2-36之外的数值类似于正则表达式只取数字
    parseFloat()可解析一个字符串,并返回一个浮点数

ES6方法 Object.is()
该方法有两个参数(val1,val2)将这两个值进行比较
并返回一个Boolen值

函数传参:数组作为传参内容

  • 将数组 arr 中的元素作为调用函数 fn 的参数
    主要使用apply或call调用,两种方法均会改变this的指向。
    • apply :第一个参数:函数体内this的指向,第二个参数:接收一个集合对象(数组和类数组)
    • call:第一个参数L函数体内的this指向,第二个参数往后是依次传入的参数
      上述问题用两种方式分别解决为:
      //apply方法
      function argsAsArray(fn, arr) {
      return fn.apply(this,arr)
      }
      //call方法
      function argsAsArray(fn, arr) {
      return fn.call(this,arr[0],arr[1],arr[2])
      }