function 与 => 的区别
在JS中,箭头函数并不是简单的function(){}匿名函数的简写语法糖,实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,在编写函数时就已经确定了。而匿名函数的this指向运行时实际调用该方法的对象,无法在编写函数时确定。
我们看一下下面的例子:
 function Test() {
     this.num = 100;
     this.func = function(){
         console.log(this.num); //
         setTimeout(function(){
             console.log(this.num); // undefined
         }, 500);
     };
 }
 var obj = new Test();
 obj.func();
这里的方法里调用了setTimeout函数,该函数500毫秒后调用我们定义的函数时,实际上是window对象调用的,所以这时匿名函数的this是指向window而不是指向obj了。
在箭头函数出现之前一般都是这么写的:
 function Test() {
     this.num = 100;
     this.func = function(){
         console.log(this.num); //
         var that = this;
         setTimeout(function(){
             console.log(that.num); //
         }, 500);
     };
 }
 var obj = new Test();
 obj.func();
这是利用了闭包的概念。箭头函数可以看做这种方式的语法糖。
如下:
 function Test() {
     this.num = 100;
     this.func = function(){
         console.log(this.num); //
         setTimeout(() => {
             console.log(this.num); //
         }, 500);
     };
 }
 var obj = new Test();
 obj.func();
箭头函数和普通函数的区别
- 不可以当做构造函数,也就是说,不可以使用 new 命令,否则会抛出错误。
- this、arguments、caller等对象在函数体内都不存在。
- 不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。
总结
箭头函数除了传入的参数之外,其它的对象都没有!在箭头函数引用了this、arguments或者参数之外的变量,那它们一定不是箭头函数本身包含的,而是从父级作用域继承的。
function 与 => 的区别的更多相关文章
- (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
		js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别? 转自:http://www.jb51.net/article/75089.htm ... 
- 立即执行函数: (function(){...})() 与 (function(){...}()) 有什么区别?
		没有区别. function foo() {...} // 这是定义,Declaration:定义只是让解释器知道其存在,但是不会运行. foo(); // 这是语句,Statement:解释器遇到语 ... 
- jQuery中$(function(){})与(function($){})(jQuery)的区别
		首先,这两个函数都是在页面载入后执行的函数,其中两者的区别在于: 在jQuery中$(function(){})等同于jQuery(function(){}),另一个写法为jQuery(documen ... 
- function foo(){}、(function(){})、(function(){}())等函数区别分析
		前面一段时间,看到(function(){}),(function(){}())这些函数就犯晕,不知道它到底是什么意思,为什么函数外要加小括号,函数后要加小括号,加和不加到底有什么区别……一直犯迷糊, ... 
- javascript精雕细琢(一):var let const function声明的区别
		目录 引言 一.var 二.let 三.const 四.function 五.总结 引言 在学习javascript的过程中,变量是无时无刻不在使用的.那么相对应的,变量声明方法也如是. ... 
- jQuery 中 jQuery(function(){})与(function(){})(jQuery) 的区别
		$(document).ready(function(){ // 在这里写你的代码... }); 在DOM加载完成时运行的代码 可以简写成 jQuery(function(){ // 在这里写你的代码 ... 
- var a=function()跟function a()的区别
		//代码一: a(); //执行这个会报错 var a = function(index){ alert(index); } a(); //执行这个不会报错 //代码二: a(); //执行这个不会报 ... 
- function,new function,Function,new Function 之间的区别
		测试一: var fud01 = function() { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typ ... 
- jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详细讲解
		1.(function($) {…})(jQuery); 1).原理: 这实际上是匿名函数,如下: function(arg){…} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写 ... 
随机推荐
- Python6 - 函数总结
			一.函数的基本知识 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 1.1函数定义规则 ... 
- 各种浏览器下的页面元素xpath获取方法
			参考链接: http://blog.sina.com.cn/s/blog_654c6ec70100v1i2.html 
- 神舟战神 HotKey 主面板无法打开?   Fn+Esc失效?
			战神笔记本的 Fn+Esc快捷键是打开 HotKey 主面板的, 其实就是 Control Center Windows更新可能导致 Control Center 无法打开,解决办法就是 更新驱 ... 
- 如何在VS Code中进行golang编程
			在VS Code中编程 使用Visual Studio Code的Go扩展,您可以获得诸如IntelliSense,代码导航,符号搜索,括号匹配,片段等语言功能,这些功能将帮助您进行Golang开发. ... 
- 001.Open-Falcon简介
			一 Open-Falcon简介 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题.监控系统作为一个成熟的运维产品,相对成熟的解决方案 ... 
- 操作系统概述(os 笔记一)
			操作系统概述 操作系统的目标和功能 1.目标:作为用户/计算机接口  计算机的使用人群大致可以分为三类,终端用户,程序开发者,操作系统设计人员. 对于终端用户,即应用程序的用户来说,他们通常不关注计 ... 
- Java初学者的30个常见问题
			本文回答了30个Java入门级初学者的常见问题. 我可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区别吗? 声明一个数组为什么需要花费大量时间?为什么Java库不用随机piv ... 
- 618大促微服务、web、redis等的超时时间
			1. 最近因为大促原因线上服务不稳定,不稳定主要是redis经常超时并且数据为定时mGet方式获得 节点一多,所有服务节点同时获取数据访问量变大导致get取数据变慢因mGet会对数据进行锁住操作, 此 ... 
- grpc使用客户端技巧
			grpc 使用技巧,最近在做的项目是服务端是go语言提供服务使用的是grpc框架. java在实现客户端的时候,参数的生成大部分采用创建者模式.java在接受go服务端 返回数据的时候,更多的是通过p ... 
- CAD画图技巧经验
			1.CAD中如何输入特殊符号 %% d ——绘制“℃”符号.例如: 98.6 ℃—— 98.6 %% dC : %% c ——绘制圆直径“φ”符号.例如:φ 30 ——%% c30 : %% p —— ... 
