es6学习笔记10--箭头函数

前端开发 作者: 2024-08-25 23:15:01
基本用法 ES6允许使用“箭头”(=>)定义函数。 上面的箭头函数等同于: 如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。 如果箭头函数的代码块部分多于一条语句,就要使用大

基本用法

var f = v => v;
var f = function(v) {
  return v;
};
var f = () => 5;
// 等同于
function () { return 5 };

var sum = (num1,num2) => num1 + num2;
var sum = (num1,num2) {
  return num1 + num2;
};
return num1 + num2; }
var getTempItem = id => ({ id: id,name: "Temp" });
const full = ({ first,last }) => first + ' ' + last;

 full(person) {
  return person.first + ' ' + person.last;
}

使用注意点

this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。

 foo() {
  setTimeout(() => {
    console.log('args:',arguments);
  },100);
}

foo(2,4,6,8)
 args: [2,8]
(() {
   [
    (() => this.x).bind({ x: 'inner' })()
  ];
}).call({ x: 'outer' });
 ['outer']
foo::bar;
bar.bind(foo);

foo::bar(...arguments);
bar.apply(foo,arguments);

const hasOwnProperty = Object.prototype.hasOwnProperty;
 hasOwn(obj,key) {
   obj::hasOwnProperty(key);
}
var method = obj::obj.foo;
 ::obj.foo;

let log = ::console.log;
var log = console.log.bind(console);

什么是尾调用?

 f(x){
   g(x);
}
“尾调用优化”(Tail call optimization),即只保留内层函数的调用帧。如果所有函数都是尾调用,那么完全可以做到每次执行时,调用帧只有一项,这将大大节省内存。这就是“尾调用优化”的意义。

严格模式

  • func.arguments:返回调用时函数的参数。
  • func.caller:返回调用当前函数的那个函数。
 restricted() {
  "use strict";
  restricted.caller;     报错
  restricted.arguments;  报错
}
restricted();



  • 下列变量的构造是词法的: arguments , super , this , new.target
  • 不能被用作构造函数:没有内部方法 [[Construct]] (该方法允许普通的函数通过 new 调用),也没有 prototype 属性。因此, new (() => {}) 会抛出错误。
> typeof () => {}
//'function'
> () => {} instanceof Function
//true

> typeof function () {}
//'function'
> function () {} instanceof Function
//true


原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_68652.html