函数的length属性,不包含rest参数
console.log((function (a) {}).length) // 1
console.log((function (...a) {}).length) // 0
console.log((function (a1,b,...a) {}).length) // 2
在 ES5 中,允许函数内部显示定义 严格模式 ‘use strict’
ES6 中,函数参数使用了参数默认值,对象解构参数和扩展运算符的话,如果在函数内部显示定义了严格模式,会出现错误
function fun101 (a,b=a) {
'use strict'
console.log(a,b)
}
fun101(12,24) // Uncaught SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list
function fun102({a,b=1}) {
'use strict'
console.log(a,b) // Uncaught SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list
}
fun102(2,6)
function fun103 (...items) {
'use strict'
console.log(items) // Uncaught SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list
}
fun103(1,2,3)
流程一:函数体中的严格模式,是适用于函数体和函数参数;
流程二:函数执行顺序是先从上往下,先执行函数参数,再执行函数体;
流程三:产生的错误:'use strict’在函数体声明的;
流程四:但是函数参数不知道当前是以严格模式运行。(这时候函数参数根据变量作用域,已经运行结束),就会产生错误
'use strict'
function fun104(x,y=x){
console.log(y) // 10
}
fun104(10)
const fun105 = (x) => {
console.log(x)
return function fun (x,y=x) {
console.log(y) // 8
}
fun(x)
}
fun105(8)
function fun1101(){}
console.log(fun1101.name) // fun1101
返回变量名
const fun1102 = function () {}
console.log(fun1102.name) // fun1102
返回实际函数名
const fun1103 = function bar () {}
console.log(fun103.name) // fun1103
console.log((new Function).name) // anonymous
修改this指向
function fun1104 () {}
console.log(fun1104.bind({}).name) // bound fun1104
console.log((function(){}).bind({}).name) // bound
如果箭头函数代码块部分多余一条语句,需要使用大括号包括起来,并用return进行返回
let fun1201 = () => { a1: 1 }
console.log(fun1201()) // undefined
let arr = [1,2,3,4,5,6]
let arr1 = arr.map((x) => x * 2)
console.log('arr1:',arr1) // [2, 4, 6, 8, 10, 12]
let values = [1,6,8,3,5,6,3,2,4,6]
let sort1 = values.sort(( a,b ) => a-b)
console.log(sort1) // [1, 2, 3, 3, 4, 5, 6, 6, 6, 8]
let arr1204 = (...nums) => nums
console.log(arr1204(1,2,3,4,5,6,7,8)) // [1, 2, 3, 4, 5, 6, 7, 8]
rest形式的参数本身就是一个数组