函数是对象,所以函数名就是指向函数对象的指针
function add (n,m){ return n+m }
let add = function(n, m) { return n + m; };
函数表达式声明和函数声明方式几乎等价
let add = (n, m)=> { return n + m; }
let sum = new Function("num1", "num2", "return num1 + num2"); // 不推荐
这样会影响性能
任何可以使用函数表达式的地方,都可以使用箭头函数
1 let ints = [1, 2, 3]; 2 console.log(ints.map(function(i) { return i + 1; })); // [2, 3, 4] 3 console.log(ints.map((i) => { return i + 1 })); // [2, 3, 4]
箭头函数的语法:
let l = e =>{ return e }
let l = e => e
注意:
1 function sum(num1, num2) { 2 return num1 + num2; 3 } 4 console.log(sum(10, 10)); // 20 5 let anotherSum = sum; 6 console.log(anotherSum(10, 10)); // 20 7 sum = null; 8 console.log(anotherSum(10, 10)); // 20
ES6的所有函数对象都会暴露一个只读的name属性,其中包含关于函数的信息。多数情况下,这个属性种保存的就是一个函数标识符,或者说是一个字符串化的变量名。如果是使用Function构造函数创建的,会被标识为"anonymous":
1 function foo (){} 2 let bar = function(){} 3 let baz = ()=> {} 4 5 console.log(foo.name); // foo 6 console.log(bar.name); // bar 7 console.log(baz.name); // baz 8 console.log((()=>{}).name); // 空字符串 9 console.log((new Function()).name); // anonymous(匿名的)
如果函数是一个获取函数(getter)、设置函数(setter),或者使用bind()实例化,那么标识符前面会加上一个前缀
1 function foo() {} 2 console.log(foo.bind(null).name); // bound foo 3 let dog = { 4 years: 1, 5 get age() { 6 return this.years; 7 }, 8 set age(newAge) { 9 this.years = newAge; 10 } 11 } 12 let propertyDescriptor = Object.getOwnPropertyDescriptor(dog, ‘age‘); 13 console.log(propertyDescriptor.get.name); // get age 14 console.log(propertyDescriptor.set.name); // set age
arguments对象的值始终会与对应的参数同步:
1 function foo (n,m){ 2 arguments[1] = 12 3 console.log( m ); // 12 4 console.log( arguments[1] ); // 12 5 } 6 7 foo(1,2)
注意:
1 function foo (n,m){ 2 arguments[1] = 12 3 console.log( m ); // undefined 4 console.log( arguments[1] ); // 12 5 } 6 7 foo(1)
原文:https://www.cnblogs.com/codexlx/p/14334126.html