标签:str 下场 es5 hand list 优化 res log 求值
目录
ES6之前,不能直接为函数的参数设置默认值,只能在函数体内进行判断并给它赋默认值
//判断y是否存在,不存在则给它默认值 'world'
function func(x,y){
y ? y : 'world';
console.log(x + y);
}
ES6允许为函数的参数设置默认值,即直接写在参数定义的后面**
function func(x,y = 'world'){
console.log(x + y);
}
func('hello'); //helloworld
func("hello",""); //hello
参数的默认值可以和解构赋值的默认值结合使用
思考:下面两种写法,有什么区别
function m1({x = 0,y = 0} = {}){
console.log(`[${x},${y}]`)
}
function m2({x,y} = {x:0,y:0}){
console.log(`[${x},${y}]`)
}
m1(); //[0,0]
m2(); //[0,0]
m1({x:3}); //[3,0]
m2({x:3}); //[3,undefined]
m1({x:3,y:5}); //[3,5]
m2({x:3,y;5}); //[3,5]
m1({}); //[0,0]
m2({}); //[undefined,undefined]
看如下示例
function func(x=0,y){
console.log(`[${x},${y}]`);
}
func(); //[0,undefined]
func(1); //[1,undefined]
func(,3); //报错
func(undefined,3); //[0,3]
第二个示例
function func(x,y=0,z){
console.log(`[${x},${y},${z}]`)
}
func(); //[undefined,0,undefined]
func(1) //[1,0,undefined]
func(1,,2) //报错
func(1,undefined,2) //[1,0,2]
总结如上两个示例,可以发现
综上所述,拥有默认值的参数,一般放在参数列表的最后面
指定了参数默认值的情况下,函数的length属性将只返回没有没有默认值的参数个数
(function func(x,y){}).length; //2
(function func(x=0,y){}).length; //1
一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域,等到初始化结束,作用域就会消失。这种语法行为,在不设置参数默认值的时候,是不会出现的
var x = 1;
function foo(x,y=function(){x=2;}){
var x = 3;
y();
console.log(x);
}
foo(); //3
console.log(x); //1
var x = 1;
function foo(x,y=function(){x=2;}){
x = 3;
y();
console.log(x);
}
foo(); //2
console.log(x); //1
ES6引入了rest参数,形式为(...变量名)。用户获取函数的多余参数,这样就不需要使用arguments对象了
function func(...numbers){
console.log(numbers);
}
func(1,2,3); //[1,2,3]
console.log(func.length) //0
从ES5开始,函数内部可以设置严格模式
function func(){
'user strict';
//code...
}
ES6做了一点修改,规定只要函数参数使用了默认值,解构赋值,或者扩展运算符,那么函数内部就不能设定为严格模式,否则会报错
function func(x=10){
'use strict'
//...报错
}
函数的name属性,返回该函数的函数名,这个属性很早就被浏览器支持,但是在ES6中,才将其写入标准
const f = function bar(){}
f.name; // bar
(new Function).name //annoymous
var f = v => v;
//等同于
var f = function(v){
return v;
}
var f = () => 5
//等价于
var f = function(){
return 5;
}
var f = (x,y) => x + y
//等价于
var f = function(x,y){
return x + y;
}
//报错
let getTempItem = id => {id:id,name:'temp'}
//不报错
let getTempItem = id => ({id:id,name:'temp'})
let func = {first,lasst} => first + ',' + last
//等价于
function func({first,lasst}){
return person.last + "," + person.last;
}
函数内的this对象,就是定义时所在的对象,而不是使用时所在的对象
不可以当做构造函数,也就是说不可以使用new进行实例化,否则报错
不可以使用arguments对象,但是可以使用rest参数代替
不可以使用yield命令,因此箭头函数不能用作Generator函数
箭头函数中的this,详细说明
示例说明
var handle = {
id:'123456',
init:function(){
document.addEventListener('click',event => this.doSomeThing(event.type),false)
},
doSomeThing:function(type){
console.log('Handing' + type + 'for' + this.id)
}
};
示例解析:
function f(x){
return g(x);
}
//非尾调用示例
function f(x){
let y = g(x);
return y;
}
function f(x){
return g(x) + 1;
}
function f(x){
g(x);
}
标签:str 下场 es5 hand list 优化 res log 求值
原文地址:https://www.cnblogs.com/mapengfei247/p/11105062.html