ES6的函数

1,函数的参数默认值

在ES6中可以直接在形参里面进行默认值赋值:

 function makeRequest(url,timeout = 200, callback = function(){}){
     ...
 }

 在ES5中我们一般使用:

function makeRequest(url,timeout,callback){
     timeout = timeout || 2000;
     callback = callback || function(){};
 }
function makeRequest(url,timeout,callback){
     timeout = (typeof timeout !== 'undefined') ? timeout || 2000;
     callback = (typeof callback !== 'undefined') ? callback || function(){};
 }

在形参未被提供情况下使用默认值。但是如果timeout的值为0,即假值,就会导致timeout被替换为默认值2000;

所以应该更安全的选择typeof来检测参数的类型,很多流行的JS库都是使用上面第二种方法。

那么,参数的默认值如何影响arguments对象?在ES5中

//非严格模式下 
function mixAgs(a,b){
     console.log(a === arguments[0]);
     console.log(b === arguments[1]);
     a = 3,b=4;
     console.log(a === arguments[0]);
     console.log(b === arguments[1]);
 }
 mixAgs(1,2); // true true true true

//严格模式下
function mixAgs(a,b){
     "use strict";
     console.log(a === arguments[0]);
     console.log(b === arguments[1]);
     a = 3,b=4;
     console.log(a === arguments[0]);
     console.log(b === arguments[1]);
 }
 mixAgs(1,2);  // true true false false

function mixAgs(a,b = 5){
  console.log(a === arguments[0]);
  console.log(b === arguments[1]);
  a = 3,b=4;
  console.log(a === arguments[0]);
  console.log(b === arguments[1]);
}
mixAgs(1,2);  //true true false false

可以看出,在非严格模式下,函数的arguments对象可以被更新,严格模式下arguments对象不能被更新。那么ES6的形参默认赋值的函数中,无论是处于严格或是非严格模式,arguments对象都是与ES5的严格模式一致,arguments对象始终能映射出初始调用状态。

猜你喜欢

转载自www.cnblogs.com/tangjiao/p/9244018.html