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]) }